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

西信巴克塔

我有两个清单listArrayitemStateList

listArray包含要显示的文本,ListView并且itemStateList包含要在中设置背景的颜色名称ListViewlistView.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;
        }
    }
}
哈西特·阿格劳瓦尔(Harshit Agrawal)

listView.getChildAt(i)起作用,其中0是第一可见行,而(n-1)是最后可见行(其中n是您看到的可见视图数)。

试试这个:

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

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

getChildAt不是ListView专用的方法。它是为每个ViewGroup(可以有子代的View)实现的。

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

仅当对Activity的内容进行度量和布局时,ListView才会通过重复调用其适配器的getView方法并将返回的View添加到其自己的子级列表中来开始创建子级视图。只有在那之后,ListView.getChildAt(x)才能返回一些非空值。

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

ListView.getChildAt返回一个已经创建的View(由ListAdapter.getView先前代表ListView创建)。请注意,您的ListAdpater可以定义许多列表项(由getCount返回的值),但是承载适配器的ListView将永远不会有更多子项在屏幕上任何给定时间都可以看到。也就是说,您的ListAdapter可以处理1000个列表项,但是ListView的子视图永远不会超过6个(当然,这取决于屏幕和listview-item的大小)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么onFling()在ListView中不起作用?

为什么在Android中有ListVIew?

listview getChildAt()返回null

为什么WPF ListView中的组为空?

Android版式:为什么我的按钮总是在ListView的下面?

为什么Flutter中的ListView不应用高度?

为什么在新活动中调用时listview为空

为什么Listview不显示DataTable中的值?

为什么AspectRatio在ListView中不起作用?

为什么在使用listView时页面中的某些控件消失了?

为什么Android ListView中的arg0不能增量更新?

为什么ListView中的元素在不同的设备上显示不同?

为什么我不能在Android中使用SimpleAdapter在ListView中单击按钮?

ExpandableListView getChildAt()返回null

对于列表视图,getChildAt(0)返回什么

Android GridView getChildAt(0).findViewById()返回null

为什么此ListView为null?

为什么不能在listView中添加新列表?

为什么列表在android listview中看起来很奇怪?

为什么RecyclerView.getChildAt(i)和Recycler.getLayoutManager()。getChildAt(i)返回不同的视图

为什么listView.getSelectionModel()。getSelectedIndex()返回-1?

Android-为什么单击CheckBox不会触发ListView的onItemClick?

ListView为null,为什么?

为什么在listview中不触发鼠标事件?

为什么 Listview 中的图像设置了两倍?

为什么我无法在 ListView 中显示 Firebase 数据

为什么getChildAt在GridView的onItemClick监听器中某些情况下返回null,即使视图可见

为什么 LiveData 在 ViewModel 中返回 null?

为什么 ListView 小部件将项目作为列返回?