Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我只能引用TextView数组I'中的最后一个元素;我要传给我的听众_Java_Android_Arrays_Loops_View - Fatal编程技术网

Java 为什么我只能引用TextView数组I'中的最后一个元素;我要传给我的听众

Java 为什么我只能引用TextView数组I'中的最后一个元素;我要传给我的听众,java,android,arrays,loops,view,Java,Android,Arrays,Loops,View,我已经动态地创建了一组30个文本视图,并试图在单击它们时更改它们的背景颜色。它们显示为垂直对的列表,每对之间有空格。当我单击顶部的文本视图时,我希望它变为绿色,紧靠其下方的文本视图变为红色,反之亦然,底部的文本视图 我现在遇到的问题是,当我单击底部的TextView时,它只设置最后一个TextView,即MyTextView[n-1]。当我点击顶部文本视图时,我会得到一个ArrayIndexOutOfBoundsException 我会使用setTag,getTag,但我不确定是否可以调用以前的

我已经动态地创建了一组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);
            }
        });
    }
}