当我打电话时listview.getChildAt(index)
,我应该index
怎样才能得到一个非空值?必须index
是 range[0, listview.getChildCount() )
或 range 中的值 [0, adapter.getCount() )
。这是来自listview count vs adapter count in android的后续问题
4 回答
您将需要使用 [0, listview.getChildCount() ) 或包裹在 a 中,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
}
}
});
ListView 只是带有子项(行)的视图。getChildAt 的范围是 [0, listview.getChildCount())。ListView 只包含现在可见的视图女巫。Adapter getCount() 返回数据行数,如 ListView 的最大长度。
那将是[0, listview.getChildCount() )
根据我的实验,这是它的工作原理。ListView 是适配器的一部分。因此,如果一个适配器有 500 个项目,而 ListView 有十 (10) 个项目。ListView 中的十个代表动态视图。因此,如果 firstVisibleItem 是适配器中的项目 217,则 ListView 的索引范围将为 (217,…,226),而 listView.getChildCount() 仍将返回 10。
因此答案是:
getChildAt(x) | x : [0+firstVisibleItem, listview.getChildCount()+firstVisibleItem)