How to find out if ListView has scrolled to top Most position?

后端 未结 10 1000
情歌与酒
情歌与酒 2020-12-29 03:09

I have a ListView, first its scrolled down, now when we scroll up,it reach top most point. I want to detect that .Is there any way?I am developing application with api level

10条回答
  •  没有蜡笔的小新
    2020-12-29 04:10

    I know this question is old, but it shows up top in Google search results. There is a new method introduced in API level 14 that gives exactly what we needed:

    http://developer.android.com/reference/android/view/View.html#canScrollVertically%28int%29

    For older platforms one can use similar static methods of ViewCompat in the v4 support library. See edit below.

    Unlike Graeme's method, this method is immune of problems caused by the internal view reuse of ListView and/or header offset.

    Edit: final solution

    I've found a method in the source code of SwipeRefreshLayout that handles this. It can be rewritten as:

    public boolean canScrollUp(View view) {
      if (android.os.Build.VERSION.SDK_INT < 14) {
        if (view instanceof AbsListView) {
          final AbsListView absListView = (AbsListView) view;
          return absListView.getChildCount() > 0
              && (absListView.getFirstVisiblePosition() > 0 || absListView
                  .getChildAt(0).getTop() < absListView.getPaddingTop());
        } else {
          return view.getScrollY() > 0;
        }
      } else {
        return ViewCompat.canScrollVertically(view, -1);
      }
    }
    

    You may need to add custom logic if the passed-in view is a custom view.

提交回复
热议问题