listview.getChildAt(i)返回NULL

时间:2014-10-09 17:19:19

标签: android listview

我有一个包含大量元素的列表视图,我在屏幕中间设置了中间元素(mRootLayoutHeight是屏幕的高度)

 listview.setSelectionFromTop(adapter.getCount()/2,mRootLayoutHeight/2);

但是当我尝试使用

访问屏幕上列表视图的所有可见元素时
for(int i=listview.getFirstVisiblePosition();i<=listview.getLastVisiblePosition();i++)

       View v=listview.getChildAt(i);

查看v始终为NULL。那是为什么?

1 个答案:

答案 0 :(得分:3)

getFirstVisiblePositionper the documentation返回:

  

为屏幕上显示的第一项返回适配器数据集中的位置

因此,如果您的数据集中有100个项目,并且向下滚动列表,则可能会查看项目15-23。因此,您要将i=15重复到i=23

getChildAt方法来自基础ViewGroup类,然后在屏幕上返回该索引处的项目 - 因此,如果您在屏幕上有8个项目(根据上面的示例),则为&#39 ; ll只能从索引0 - 8获取项目,即使这些项目存在于数据集中的不同位置。

因此,在此处提供的示例中,如果您尝试在索引15处获取视图,则您将获得null,因为ListView视图组中只有8个视图。