请帮我解决这个问题,我从来没有在onClickListener中解释过它是如何工作的,所以:
有我自己的课程:
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;
}
}
我初衷一个并添加一个onClickListener:
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所说的那样,我无法修改它,因为它是最终。 它有意义吗?
答案 0 :(得分:1)
您创建的OnClickListener是一个匿名内部类,只能引用最终值。
简单地改变:
ItemFrame myItemFrame = new ItemFrame(this);
是:
final ItemFrame myItemFrame = new ItemFrame(this);
您仍然可以修改您创建的ItemFrame对象。你无法将新的一个重新分配给myItemFrame变量。
答案 1 :(得分:1)
还有另一种实现代码的方法,看看它。
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);
}
}