Android 获取listview项的可见位置

Android 获取listview项的可见位置,android,Android,我有一个自定义游标适配器来填充片段中的列表视图 我想设置列表视图项中某些元素的可见性,具体取决于该项是否为列表中第一个可见项。是否可以在游标适配器的bindView()方法中获取该信息?适配器的用途计划: 创建视图 向它们附加数据 返回ListView要使用的视图 结论:适配器不知道它创建的视图将显示在哪里 但是,ListView确实知道这一点,而且这可能是您实现此功能的唯一方法 开始使用的示例代码: listView.setOnScrollListener(new AbsListView.On

我有一个自定义游标适配器来填充片段中的列表视图


我想设置列表视图项中某些元素的可见性,具体取决于该项是否为列表中第一个可见项。是否可以在游标适配器的
bindView()
方法中获取该信息?

适配器的用途计划:

  • 创建视图
  • 向它们附加数据
  • 返回ListView要使用的视图
  • 结论:适配器不知道它创建的视图将显示在哪里

    但是,
    ListView
    确实知道这一点,而且这可能是您实现此功能的唯一方法

    开始使用的示例代码:

    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
        int previousFirst = -1;
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
    
        }
    
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (previousFirst != firstVisibleItem) {
                previousFirst = firstVisibleItem;
                TextView textView = (TextView) view.findViewById(R.id.title);
                if (textView != null) textView.setText("First: " + firstVisibleItem);
            }
        }
    });
    
    此代码的问题:

    • 第一项更改后,需要将其文本设置回上一项
    • 视图层次结构也是如此。如果您更改此视图的外观,在它不再是第一个视图之后,您需要将其更改回来
    • ListView在创建时不会滚动。因此,在手动滚动之前,第一项不会更改文本
    ListView不包括在内部自定义第一个可见项的选项,这就是为什么您必须使用所有这些肮脏的攻击。但是,也有可能:)。我让你自己去克服这些问题


    祝你好运

    您指的是什么项目?@Siva我指的是listview项目。游标适配器.list项生成的项通过数据库中的游标动态显示。在这种情况下,您可以检查检索项,并在本地进行比较,以查看哪个项是first@Siva这基本上是我的问题,谢谢。这是一个很好的答案。我以前只实现过一次,就像你说的那样,它非常混乱。现在,我选择在
    bindView()
    中使用
    cursor.moveToPrevious()
    来获取前一行,然后相应地操作当前行的视图。这仍然没有给我第一个可见的行,但我可以接受它。