获取listview项目的可见位置

时间:2014-09-14 12:22:26

标签: android

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

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

1 个答案:

答案 0 :(得分:3)

适配器的目的计划:

  1. 创建视图
  2. 将数据附加到他们
  3. 返回要使用的ListView视图。
  4. 结论:适配器不知道它所创建的视图将在何处显示。

    然而,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不包含在内部自定义第一个可见项的选项,这就是您必须使用所有这些脏黑客的原因。但是,有可能:)。我让你自己克服这些问题。

    祝你好运!