我有一个包含大量元素的列表视图,我在屏幕中间设置了中间元素(mRootLayoutHeight是屏幕的高度)
listview.setSelectionFromTop(adapter.getCount()/2,mRootLayoutHeight/2);
但是当我尝试使用
访问屏幕上列表视图的所有可见元素时for(int i=listview.getFirstVisiblePosition();i<=listview.getLastVisiblePosition();i++)
View v=listview.getChildAt(i);
查看v始终为NULL。那是为什么?
答案 0 :(得分:3)
getFirstVisiblePosition
,per the documentation返回:
为屏幕上显示的第一项返回适配器数据集中的位置。
因此,如果您的数据集中有100个项目,并且向下滚动列表,则可能会查看项目15-23。因此,您要将i=15
重复到i=23
。
getChildAt
方法来自基础ViewGroup
类,然后在屏幕上返回该索引处的项目 - 因此,如果您在屏幕上有8个项目(根据上面的示例),则为&#39 ; ll只能从索引0 - 8获取项目,即使这些项目存在于数据集中的不同位置。
因此,在此处提供的示例中,如果您尝试在索引15处获取视图,则您将获得null,因为ListView视图组中只有8个视图。