0

当我打电话时listview.getChildAt(index),我应该index怎样才能得到一个非空值?必须index是 range[0, listview.getChildCount() )或 range 中的值 [0, adapter.getCount() )这是来自listview count vs adapter count in android的后续问题

4

4 回答 4

2

您将需要使用 [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
        }               
    }
});
于 2013-10-02T17:50:24.103 回答
0

ListView 只是带有子项(行)的视图。getChildAt 的范围是 [0, listview.getChildCount())。ListView 只包含现在可见的视图女巫。Adapter getCount() 返回数据行数,如 ListView 的最大长度。

于 2013-10-02T18:03:01.273 回答
0

那将是[0, listview.getChildCount() )

于 2013-10-02T17:49:43.593 回答
0

根据我的实验,这是它的工作原理。ListView 是适配器的一部分。因此,如果一个适配器有 500 个项目,而 ListView 有十 (10) 个项目。ListView 中的十个代表动态视图。因此,如果 firstVisibleItem 是适配器中的项目 217,则 ListView 的索引范围将为 (217,…,226),而 listView.getChildCount() 仍将返回 10。

因此答案是:

getChildAt(x) | x : [0+firstVisibleItem, listview.getChildCount()+firstVisibleItem)
于 2013-10-03T19:33:34.973 回答