为什么我的 ListView 只创建可见的子元素?

Why does my ListView only create the child elements which are visible?

提问人:Victorfori 提问时间:11/18/2020 更新时间:11/18/2020 访问量:23

问:

我正在尝试制作一个应用程序,该应用程序包括按特定顺序猜测某些单词。

我在右边有 16 个按钮,每个按钮都有一个相关的单词。当我单击正确的按钮时,ListView 中的单词会变为灰色。我遇到的问题是,当我在 listView 中滚动并单击正确的按钮时,getChildAt 方法从第一个可见元素开始计数,而不是从列表视图的开头开始计数;我不知道如何解决它。

我正在使用 ArrayAdapter。

这是我设置适配器的地方:

// frutasLista is the array with the String elements that I want to add to the list.
((ListView) activity.findViewById(R.id.listaFrutas)).setAdapter(
                new ArrayAdapter<>(activity, android.R.layout.simple_list_item_1, frutasLista)
);

这是我将当前元素颜色设置为灰色的地方:

// contAciertos Is the counter where I save how many word the user guessed right.
((TextView) ((ListView) activity.findViewById(R.id.listaFrutas)).getChildAt(contAciertos)).setTextColor(Color.GRAY);
contAciertos++;

当我单击正确的元素并且我没有进行任何滚动时,它应该正常工作 第一种情况

但是,如果我滚动并再次单击第一个正确的元素,就会发生这种情况: 第二种情况

我向下滚动到“Platano”并单击了第一个正确的元素,即“Cereza”。而不是像我尝试的那样将 ListView 的第一个元素变成灰色。它改变了那一刻的第一个可见元素,即“普拉塔诺”。

提前致谢。 对不起,如果没有清楚地解释自己。

Android 列表视图 滚动 nullpointerexception android-arrayadapter

评论

2赞 Ben P. 11/18/2020
不要直接更新视图。相反,请更新支持适配器的数据列表。然后,您的方法可以根据适配器中的数据正确设置颜色。getView()
0赞 Eselfar 11/18/2020
“为什么我的 ListView 只创建可见的子元素?” -> 因为这是他们的目的。如果您的列表有 1,000 个项目,并且您的用户一次只能看到 10 个项目,则您不希望为所有这些项目创建 UI,这将使 UI 无缘无故地非常滞后。顺便说一句,您应该使用 RecyclerView 而不是 ListView

答: 暂无答案