什么限制listview.getChildAt(索引)的索引

时间:2013-10-02 17:44:29

标签: android android-layout android-listview android-arrayadapter android-adapter

当我致电listview.getChildAt(index)时,index应该为我取回一个非空值?必须index[0, listview.getChildCount() )范围内或[0, adapter.getCount() )范围内的值。这是来自listview count vs adapter count in android

的后续问题

4 个答案:

答案 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)