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

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

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

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

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

有人有什么想法吗?

【问题讨论】:

    标签: android listview


    【解决方案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。

      【讨论】:

      • 它只是没有回答问题
      猜你喜欢
      • 2012-06-26
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 2014-12-07
      相关资源
      最近更新 更多