如果滚动到快速,则无法在ListView上检测firstVisibleItem

时间:2018-11-05 09:22:36

标签: android android-listview

我具有滚动时的功能,并且如果listView的firstVisibleItem是标题,则页码(TextView)会增加到1。默认情况下,页码是Page 1 of 55是标题总数。然后,如果用户向上滚动,并且标题与listView的顶部对齐,则页码将为Page 2 of 5。问题是,如果滚动速度太快,则页码不会增加,总之firstVisibleItem未被检测到。还有其他方法可以实现这一目标吗?

我的标题仅像一个简单的列表行。我只更改了该行的背景颜色(带有条件),使其看起来像标题。

非常感谢您提供的所有帮助。

更新

这是我的onScrollListener在这里检测到firstVisibleItem

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
     private int mLastFirstVisibleItem;

     @Override
     public void onScrollStateChanged(AbsListView view, int scrollState) { }

     @Override
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

         if(mLastFirstVisibleItem < firstVisibleItem) {
             final MyModel item = adapter.getItem(mLastFirstVisibleItem);
             if (item != null) {
                 if (item.isHeader()) {
                     if (mLastFirstVisibleItem > 0) {
                         count++;
                         currentPage.setText(String.valueOf(count));
                     }
                 }
             }

         }

         if(mLastFirstVisibleItem > firstVisibleItem) {
             final MyModel item = adapter.getItem(mLastFirstVisibleItem);
             if (item != null) {
                 if (item.isHeader()) {
                     count--;
                     currentPage.setText(String.valueOf(count));
                 }
             }
         }
         mLastFirstVisibleItem=firstVisibleItem;

     }

  });

1 个答案:

答案 0 :(得分:0)

我认为他们应该成为

的条件
if(mLastFirstVisibleItem <= firstVisibleItem) {
...
}

 if(mLastFirstVisibleItem >= firstVisibleItem) {
    ...
    }

因为两个值都相同。 您当时的条件是否为假

而不是每次都更新计数变量 您可以使用mLastFirstVisibleItem或adapter.getSize的组合或计数以显示最新值 如果两者相同,那将是最后一个项目