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
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
}
}
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();
}
}
});
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();
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 See edit below.ViewCompat
in the v4 support library.
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.