gpt4 book ai didi

android - 为什么 ListView.getChildAt() 在 android 中返回 null

转载 作者:搜寻专家 更新时间:2023-11-01 08:28:49 26 4
gpt4 key购买 nike

我有两个列表 listArrayitemStateList .

listArray包含要在 ListView 中显示的文本和 itemStateList包含用于在 ListView 中设置背景的颜色名称.但是listView.getChildAt(i)总是返回 null .

我在 StackOverflow 上找到了一些说明使用 listView.getAdapter().getView(i) 的解决方案反而。但没有详细说明,为什么要使用 listView.getAdapter()为什么listView.getChildAt()不管用。也只想知道什么时候使用 listView.getChildAt() .

这是代码..

public void createAndSetAdapter(){

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listArray);

listView.setAdapter(adapter);

for(int i = 0; i < listArray.size(); i++){
switch (itemStateList.get(i)){
case "Green_color":
listView.getAdapter().getView(i, null, listView).setBackgroundColor(Color.parseColor("#AAFF7F"));
break;
case "red_color":
listView.getAdapter().getView(i, null, listView).setBackgroundColor(Color.parseColor("#FFAAAA"));
break;
default:
break;
}
}
}

最佳答案

listView.getChildAt(i) 的工作原理是 0 是第一个可见行,(n-1) 是最后一个可见行(其中 n 是您看到的可见 View 的数量)。

试试这个:

listView.getChildAt(positionOfChildYouWantGet - f_listView.getFirstVisiblePosition());

使用 getChildAt 和 listAdapter.getView 的区别在于:

getChildAt 不是 ListView 的特殊方法。它是为每个 ViewGroup(可以有 subview 的 View )实现的。

创建 ListView 时,它没有子项。调用其适配器的 getView 方法不会改变这一事实,它不会添加任何子项。

只有当您的 Activity 的内容得到测量和布局时,ListView 才会开始创建 subview ,方法是重复调用其适配器的 getView 方法并将返回的 View 添加到它自己的 subview 列表中。只有在那之后,ListView.getChildAt(x) 才能返回一些非空值。

ListAdapter.getView 方法代表 ListView/GridView/等返回全新的 View (或只返回回收的 View )。您的代码永远不应调用 ListAdapter.getView 本身(除非您进行单元测试)。

ListView.getChildAt 返回一个已创建的 View (之前由 ListAdapter.getView 代表 ListView 创建)请注意,您的 ListAdpater 可能会定义许多列表项(getCount 返回的值),但托管适配器的 ListView 永远不会有的 child 多于屏幕上任何给定时间可以看到的 child 。 IE。您的 ListAdapter 可能处理 1000 个列表项,但您的 ListView 永远不会有超过 6 个 subview (当然取决于屏幕大小和 ListView 项)。

关于android - 为什么 ListView.getChildAt() 在 android 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42312016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com