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

后端 未结 10 822
情歌与酒
情歌与酒 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 03:57

    If you can extends ListView directly, then you can use the protected method called "computeVerticalScrollOffset()" inside the override method "onScrollChanged()".

    With that protected method return 0, means that your ListView is now reached at top.

    Code Snippet

            listView = new ListView(this){
            @Override
            protected void onScrollChanged(int l, int t, int oldl, int oldt) {
                super.onScrollChanged(l, t, oldl, oldt);
    
                if( computeVerticalScrollOffset() == 0 ){
                    // Reach top
                }
            }
    
    0 讨论(0)
  • 2020-12-29 04:00
    lstView.setOnScrollListener(new AbsListView.OnScrollListener() {
    
                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                    //To change body of implemented methods use File | Settings | File Templates.
                    if (0 == firstVisibleItem){
                        Toast.makeText(MyActivity.this, "Scroll to Top ", Toast.LENGTH_SHORT).show();
                    }
                }
            });
    
    0 讨论(0)
  • 2020-12-29 04:05

    Too late but try this one it works well in RecyclerView. -1 to check if it can scroll to top while 1 is to check if it can scroll to bottom

    if (listView.canScrollVertically(-1))
       listView.smoothScrollToPosition(0);
    else
       onBackPressed();
    
    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题