我在循环中为按钮添加OnClickListener,问题是i变量需要是最终的,但是然后就不能增加他。
我的代码:
ArrayList<Button> buttonList = new ArrayList<Button>();
buttonList.add((Button)findViewById(R.id.mov1_btn));
buttonList.add((Button)findViewById(R.id.mov2_btn));
buttonList.add((Button)findViewById(R.id.mov3_btn));
buttonList.add((Button)findViewById(R.id.mov4_btn));
buttonList.add((Button)findViewById(R.id.mov5_btn));
buttonList.add((Button)findViewById(R.id.mov6_btn));
for(int i = 0;i<buttonList.size();i++)
{
buttonList.get(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
buttonList.get(i).setBackgroundResource(R.drawable.mov1o);
movCnt = i;
}
});
}
答案 0 :(得分:5)
由于i
不能是final
,您必须声明另一个变量。
for (int i = 0; i < buttonList.size(); i++) {
final int current = i;
buttonList.get(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
buttonList.get(current).setBackgroundResource(R.drawable.mov1o);
movCnt = current;
}
});
}
答案 1 :(得分:1)
不要将变量i
设置为final,而只是将标记设置为视图。
这样,值可以始终保持在视图中,并且可以在需要时使用。
for(int i = 0;i<buttonList.size();i++)
{
buttonList.setTag(i);
buttonList.get(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
buttonList.get(i).setBackgroundResource(R.drawable.mov1o);
movCnt = (Integer)v.getTag();
}
});
}
答案 2 :(得分:1)
//...
for(int i = 0;i<buttonList.size();i++)
{
final int current = i;
buttonList.get(ii).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
buttonList.get(current).setBackgroundResource(R.drawable.mov1o);
movCnt = current;
}
});
}
答案 3 :(得分:1)
你需要让按钮最终不是i,这是一个应该完成的例子:
ArrayList<Button> list = new ArrayList<Button>();
list.add((Button) findViewById(R.id.BTN_login));
list.add((Button) findViewById(R.id.BTN_login));
list.add((Button) findViewById(R.id.BTN_login));
list.add((Button) findViewById(R.id.BTN_login));
for (int i = 0; i < list.size(); i++)
{
final Button tempButton = list.get(i);
tempButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tempButton.setBackgroundResource(R.drawable.mov1n);
tempButton.setBackgroundResource(R.drawable.mov1o);
}
});
}
希望它有所帮助。