当我致电listview.getChildAt(index)
时,index
应该为我取回一个非空值?必须index
是[0, listview.getChildCount() )
范围内或[0, adapter.getCount() )
范围内的值。这是来自listview count vs adapter count in android
答案 0 :(得分:2)
您需要使用[0,listview.getChildCount())或包装try/catch
,因为这可能会为您提供IndexOutOfBoundsException
。但是,如果您获得null
值,则可能是因为ListView
尚未完成绘制。您需要发布Runnable
来解决此问题。
例如,这就是我如何计算并确定List
中的项目是否多于屏幕上的项目:
listView.post(new Runnable()
{
public void run()
{
int numItemsVisible = listView.getLastVisiblePosition() -
listView.getFirstVisiblePosition();
if (itemsAdapter.getCount() - 1 > numItemsVisible && numItemsVisible > -1)
{ //do stuff }
else
{
//do other stuff
}
}
});
答案 1 :(得分:0)
那将是[0, listview.getChildCount() )
答案 2 :(得分:0)
ListView只是带有子(行)的视图。 getChildAt的范围是[0,listview.getChildCount())。 ListView仅包含视图女巫现在可见。 Adapter getCount()返回数据行的计数,例如ListView的最大长度。
答案 3 :(得分:0)
根据我的实验,这是它的工作原理。 ListView是适配器的一部分。因此,如果适配器有500个项目,ListView有10个(10)。 ListView中的十个表示动态视图。因此,如果firstVisibleItem是适配器中的项目217,那么ListView的索引范围将是(217,...,226),而listView.getChildCount()仍将返回10.。
因此答案是:
getChildAt(x) | x : [0+firstVisibleItem, listview.getChildCount()+firstVisibleItem)