2

私はOnClickListenerここに私のものを持っていますGridView

public class MyOnClickListener implements View.OnClickListener {
     private final int position;  

public MyOnClickListener(int position)  
{  
    this.position = position;  
}  

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(position){
        case 0:
        Intent a = new Intent(v.getContext(), Weapons.class);
        v.getContext().startActivity(a);
        break;
    //case 1, 2, etc...  

    }
}

これを別のクラスで使用するにはどうすればよいですか? 私はCategoryクラスにこれをしています:

GridView gridview = (GridView) findViewById(R.id.categoryGrid);
gridview.setAdapter(new ButtonAdapter(this));
gridview.setOnClickListener(new MyOnClickListener(this));

これを行うと、(new MyOnClickListener(this));行に下線が引かれ、 に変更public MyOnClickListener(int position)する必要があることが示されpublic MyOnClickListener(Category category)ます。

どうすればこれを修正できますか?

4

1 に答える 1

2

必要なものを選択してください。オブジェクトまたは整数プリミティブのどちらMyOnClickListenerで受け入れたいですか?Category

問題は、コンストラクターが int を受け入れることですが、作成するときに、整数ではないインスタンスを指す new MyOnClickListenerpass off を作成することです。整数のパスを渡したくない場合(通常は開始インデックスです)。thisCategorythis0

gridview.setOnClickListener(new MyOnClickListener(0));

例えば

public MyOnClickListener(int position)  //requires an int
{  
    this.position = position;  
}  

両方を受け入れたい場合は、コンストラクターが 2 つの引数を受け入れるようにするか、2 つの別個のコンストラクターを作成します。

Category category;
public MyOnClickListener(int position, Category category)  
{  
    this.position = position;  
    this.categoty = category;
}  

または

Category category;
public MyOnClickListener(Category category)  
{  
    this.position = 0;  
    this.categoty = category;
}  

また、GridViews は位置を登録しないOnItemClickListenerため、代わりに を使用する必要があります。これは、以下を実装するようにクラスを変更する必要があることを意味します 。OnClickListener AdapterView.OnItemClickListener

public class MyOnClickListener implements AdapterView.OnItemClickListener {

  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    switch(position){
      case 0:
        Intent a = new Intent(v.getContext(), Weapons.class);
        v.getContext().startActivity(a);
        break;
        //case 1, 2, etc...  

    }
  }
}

次に、次を使用して設定しsetOnItemClickListener()ます。

gridview.setOnItemClickListener(new MyOnClickListener());
于 2013-02-24T22:27:09.893 に答える