Android - 从另一个类设置OnClickListener

时间:2013-02-24 22:24:40

标签: android onclicklistener android-gridview

我的OnClickListener:{/ p>在这里有一个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)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

选择您想要的内容,您希望MyOnClickListenerCategory对象或整数原语中接受吗?

问题是你的构造函数接受了一个int,但当你创建一个new MyOnClickListener时,你将this传递给Category实例,该实例指向 < em> not 一个整数。如果你不想传递this整数传递(通常0是起始索引)。

gridview.setOnClickListener(new MyOnClickListener(0));

例如

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

如果你想同时接受两个,请使构造函数接受两个参数,或者创建两个独立的构造函数。

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());