我已经动态创建了一组 30 个 TextView,并试图在我单击它们时更改它们的背景颜色。它们显示为垂直对的列表,每对之间有空格。当我单击顶部的 TextView 时,我希望它变为绿色,紧靠其下方的变为红色,反之亦然。
我现在遇到的问题是,当我单击底部的 TextView 时,它只会设置最后一个 TextView,即 myTextViews[n-1]。当我点击顶部的 TextView 时,我得到一个 ArrayIndexOutOfBoundsException。
我会使用 setTag、getTag,但我不确定是否可以调用之前的标签。
public class MainActivity extends OtherActivity {
int i = null;
final TextView[] myTextViews = new TextView[names.size()]; // create an empty array;
for (i = 0; i < names.size(); i++) {
// create a new TextView
final TextView rowTextView = new TextView(this);
// save a reference to the TextView for later
myTextViews[i] = rowTextView;
// set some properties of rowTextView
rowTextView.setText(names.get(i));
// Create onClickListeners for each choice
if ((i+1)%3 != 0) {
if (i%3 == 0) {
// Sets onClick rules for top choice
rowTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rowTextView.setBackgroundColor(Color.GREEN);
myTextViews[i+1].setBackgroundColor(Color.GREEN);
}
});
} else if ((i-1)%3 == 0) {
// Sets onClick rules for bottom choice
rowTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rowTextView.setBackgroundColor(Color.GREEN);
myTextViews[i-1].setBackgroundColor(Color.RED);
}
});
}
}
}
}
最佳答案
正如我在评论中指出的那样,我对你的问题有点困惑。如果变量不是 final
,则不能在 onClick
方法中使用索引,也不能使变量成为 final
,因为那样它是所有的观点都一样。解决办法是这样的(没测试过,可能是漏括号或者错字)。
TextView[] myTextViews = new TextView[names.size()];
for (int i = 0; i < names.size(); i++) {
myTextViews[i] = new TextView(this);
myTextViews[i].setText(names.get(i));
}
for (int i = 0; i < names.size(); i++) {
final TextView thisOne = myTextViews[i];
if (i%3 == 0) {
final TextView nextOne = myTextViews[i+1];
thisOne.setOnClickListener(new View.onClickListener() {
@Override
public void onClick(View v) {
thisOne.setBackgroundColor(Color.GREEN);
nextOne.setBackgroundColor(Color.GREEN);
}
});
} else if ((i-1)%3 == 0) {
final TextView previousOne = myTextViews[i-1];
thisOne.setOnClickListener(new View.onClickListener() {
@Override
public void onClick(View v) {
thisOne.setBackgroundColor(Color.GREEN);
previousOne.setBackgroundColor(Color.RED);
}
});
}
}
关于java - 为什么我只能引用传递给 onClickListener 的 TextView 数组中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575571/