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,但是当您制作 a 时,new MyOnClickListener您 pass off this,它指向 Category实例,它不是整数。如果您不想传递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 应该使用 anOnItemClickListener代替,因为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...  

    }
  }
}

然后使用 using 设置它setOnItemClickListener()

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