Java 为什么我只能引用TextView数组I'中的最后一个元素;我要传给我的听众
我已经动态地创建了一组30个文本视图,并试图在单击它们时更改它们的背景颜色。它们显示为垂直对的列表,每对之间有空格。当我单击顶部的文本视图时,我希望它变为绿色,紧靠其下方的文本视图变为红色,反之亦然,底部的文本视图 我现在遇到的问题是,当我单击底部的TextView时,它只设置最后一个TextView,即MyTextView[n-1]。当我点击顶部文本视图时,我会得到一个ArrayIndexOutOfBoundsException 我会使用setTag,getTag,但我不确定是否可以调用以前的标记Java 为什么我只能引用TextView数组I'中的最后一个元素;我要传给我的听众,java,android,arrays,loops,view,Java,Android,Arrays,Loops,View,我已经动态地创建了一组30个文本视图,并试图在单击它们时更改它们的背景颜色。它们显示为垂直对的列表,每对之间有空格。当我单击顶部的文本视图时,我希望它变为绿色,紧靠其下方的文本视图变为红色,反之亦然,底部的文本视图 我现在遇到的问题是,当我单击底部的TextView时,它只设置最后一个TextView,即MyTextView[n-1]。当我点击顶部文本视图时,我会得到一个ArrayIndexOutOfBoundsException 我会使用setTag,getTag,但我不确定是否可以调用以前的
public类MainActivity扩展了OtherActivity{
int i=零;
final TextView[]mytextview=new TextView[names.size()];//创建一个空数组;
对于(i=0;i
正如我在评论中指出的,我对你的问题有点困惑。如果变量不是final
,则不能在onClick
方法中使用索引,并且不能使变量final
,因为这样所有视图的索引都相同。解决方案是这样的(它没有经过测试。可能缺少括号或输入错误)
TextView[]myTextViews=newtextView[names.size()];
对于(int i=0;i
该代码无法编译。您不能执行myTextViews[i+1].setBackgroundColor(Color.GREEN)因为i
不是final
,所以onClick()中的code>。如果代码未编译,则无法获取ArrayIndexOutOfBoundsException
。你能澄清一下吗?作为一种临时解决办法,我知道这是一种不好的做法,我宣布我是一名全球员工。这会迫使它作为最终值,而仅仅使用它的最后一个值吗?
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);
}
});
}
}