2014-10-09 26 views
2

我有非常大的数目的元素的列表视图,我已经设置在屏幕的中间的中间元件(mRootLayoutHeight是屏幕的高度)listview.getChildAt(ⅰ)返回NULL

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

但当我尝试访问在屏幕上使用列表视图的所有可见元素时

for(int i=listview.getFirstVisiblePosition();i<=listview.getLastVisiblePosition();i++) 

     View v=listview.getChildAt(i); 

视图v始终为NULL。这是为什么?

回答

2

getFirstVisiblePosition,为per the documentation回报:

返回适配器的数据中的位置对屏幕上显示的第一个项目设置

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

getChildAt方法来自基类ViewGroup类,然而在屏幕上返回该索引处的项目 - 因此,如果屏幕上有8个项目(如上面的示例所示),则只能从项目中获取项目索引0 - 8,尽管这些项目存在于数据集中的不同位置。

所以在我这里提供的例子中,如果你试图在索引15获得视图,你会得到null,因为在ListView视图组中只有8个视图。