Android ListView:获取可见项的数据索引

Posted

技术标签:

【中文标题】Android ListView:获取可见项的数据索引【英文标题】:Android ListView: get data index of visible item 【发布时间】:2011-01-01 09:16:24 【问题描述】:

我有一个使用SimpleAdapter 创建的android ListView,其中包含的项目多于屏幕。滚动列表后,我需要获取列表中第一个可见项在数据模型中的位置。

基本上我想要一个类似的函数:listView.getChildAt(0).getPositionInDataModel()

Adapter 里面有一些函数,比如看起来很有用的getItemId(position);但是,SimpleAdapter 实现只是返回传入的位置,而不是我希望的行 id。

蛮力解决方案是获取索引 0 处的视图,并将其与适配器中每个项目的视图进行比较。但是,似乎没有一种简单的方法可以从适配器获取特定位置的视图。

有人有什么想法吗?

【问题讨论】:

【参考方案1】:

这很容易。只需使用ListView.getFirstVisiblePosition() + indexYouWant。例如,要获取ListView 中显示的第二个孩子在适配器中的位置,只需使用getFirstVisiblePosition() + 1

不需要上面回复中显示的所有可怕的东西:)

【讨论】:

哇,我不敢相信我错过了。我一直在寻找这样的功能。一定是因为它是在我没想到的父类中定义的。还在习惯这种 javadoc 风格...感谢您指出! getFirstVisiblePosition() 和 getLastVisiblePosition() 之间的一些视图在我的 Gridview 中返回 null。不过,我正在回收观点 - 这是原因吗?我希望可见视图可以保证不为空,特别是因为我可以直观地看到它们不是。【参考方案2】:
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()

    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
    
        AisleId= parent.getSelectedItemId();
    
    @Override
    public void onNothingSelected(AdapterView<?> arg0) 
        // TODO Auto-generated method stub
    
);

在此我们将获得列表项 ID parent.getSelectedItemId();

【讨论】:

【参考方案3】:

只需使用getPositionForView(View) (see documentation)。这种方法的主要优点是它也适用于项目的后代Views。

【讨论】:

它只是没有回答问题

以上是关于Android ListView:获取可见项的数据索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中获取主屏幕小部件列表项的点击事件[重复]

android listview中如何将获取来的数据添加至listview尾部

vb listview 选中项的列值怎么获取

如何在android的listview中获取项目的视图?

从具有按钮的 ListView 获取列表项的位置

android listView 怎么指定项的背景设置