Android 如何修改类';onClickListener中的数据标记?
请帮助我,我从来都不了解OnClick Listener内部的工作原理,所以: 我有自己的课:Android 如何修改类';onClickListener中的数据标记?,android,Android,请帮助我,我从来都不了解OnClick Listener内部的工作原理,所以: 我有自己的课: public class ItemFrame extends LinearLayout{ int item_id; public ItemFrame(Context context){ super(context); } public int getItem_id() { return item_id; }
public class ItemFrame extends LinearLayout{
int item_id;
public ItemFrame(Context context){
super(context);
}
public int getItem_id() {
return item_id;
}
public void setItem_id(int item_id) {
this.item_id = item_id;
}
}
我初始化一个并添加一个OnClick侦听器:
ItemFrame myItemFrame = new ItemFrame(this);
myItemFrame.setOnClickListener(new OnClickListener(){
public void onClick(View v){
//ERROR HERE:
//Cannot refer to a non-final variable myItemFrame inside an inner class
//defined in a different method
//Quick fix: Change modifier of 'myItemFrame' to final.
myItemFrame.setItemId(100);
}
});
所以。。。我的问题是:
如何在onClickListener中设置类的数据标记???
如果我像Eclipse所说的那样将其更改为final,我将无法修改它,因为它是final。
这有意义吗?您创建的OnClickListener是一个匿名内部类,只能引用最终值 简单更改:
ItemFrame myItemFrame = new ItemFrame(this);
将是:
final ItemFrame myItemFrame = new ItemFrame(this);
您仍然可以修改创建的ItemFrame对象。您只是无法将新代码重新分配给myItemFrame变量。还有另一种实现代码的方法,请查看
public class ItemFrame extends LinearLayout implements OnClickListener
{
int item_id;
public ItemFrame(Context context)
{
super(context);
}
public int getItem_id()
{
return item_id;
}
public void setItem_id(int item_id)
{
this.item_id = item_id;
}
public void onClick(View v)
{
setItemId(100);
}
}