这是我的代码..
for (int i = 0; i < 12; i++)
{
buttons[i] = (Button)findViewById(R.id.buttonid);
@Override
public void onClick(View v) {
// in this method I want to set the button text to the iteration variable 'i'
}
});
}
我需要在onclick方法中获取迭代变量。我尝试在onclick方法之前将i值赋给另一个int变量(使用和不使用final)。但所有这些都显示出一些错误。
提前致谢。
答案 0 :(得分:2)
通过在方法之外的类顶部声明i变量使其变为全局变量。 private int i;
http://en.wikipedia.org/wiki/Global_variable
然后你不需要在for循环中说int
for (i = 0; i < 12; i++)
{
buttons[i] = (Button)findViewById(R.id.buttonid);
@Override
public void onClick(View v) {
// in this method I want to set the button text to the iteration variable 'i'
}
});
}
您还可以使用评论中提到的最终修饰符,如果您希望我们调试您的错误,您必须发布尝试使用它的方式。
答案 1 :(得分:0)
您可以放弃将i
变量作为全局/最终变量,并使用setTag()
Button
方法传递值。
for (int i = 0; i < 12; i++) {
buttons[i] = (Button)findViewById(R.id.buttonid);
buttons[i].setTag(new Integer(i));
buttons[i].setOnClickListener(listener);
}
并将OnClickListener
:
OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer iHolder = v.getTag();
int i = iHolder.intValue();
// set button text
}
};
这样Button
本身就会保留对i
值的引用,而不是全局浮动或声明为final
。