我的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)
。
我该如何解决这个问题?
答案 0 :(得分:1)
选择您想要的内容,您希望MyOnClickListener
在Category
对象或整数原语中接受吗?
问题是你的构造函数接受了一个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());