for (int i=0; i<pages; i++) {
ImageView img=new ImageView(this);
...
img.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
showpage(i);
}
}
});
FLall.addView(img);
}
我怎么能在java中这样做?我总是“不能在不同方法中定义的内部类中引用非最终变量”
答案 0 :(得分:9)
虽然您可以创建一个垃圾变量并将其标记为final
但我实际上更喜欢通过构造函数传递此值。它不那么简洁,但是如果你决定在某个时候移动你的匿名内部类,那么它可以更加可维护。
for (int i=0; i<pages; i++) {
ImageView img=new ImageView(this);
...
img.setOnClickListener(new OnClickListener(i) {
private int ind;
public OnClickListener(int ind){
super();
this.ind = ind;
}
@Override
public void onClick(View v) {
showpage(ind);
}
});
FLall.addView(img);
}
答案 1 :(得分:8)
在setOnClickListener
来电之前:
final int thisIndex = i;
然后在处理程序中引用thisIndex
。