Alex Rivera | Logout

Android ListView scrolling to top

Asked 2010-05-22T21:14:38.727
79

I have a ListView with custom rows. When any of these rows is clicked, the ListView's data is regenerated. I'd like the list to scroll back to the top when this happens.

I initially tried using setSelection(0) in each row's OnClickListener to achieve this but was unsuccessful (I believe because the ListView loses its scroll position when its data is invalidated - so my call to setSelection is undone. I still don't understand how the ListView decides where to scroll to after invalidation, though).

The only working solution I know of was given by Romain Guy here: http://groups.google.com/group/android-developers/browse_thread/thread/127ca57414035301

It involves (View.post)ing the call to _listView.setSelection(0). I found this to perform quite poorly. The newly generated list shows up with its scroll location unchanged and there is a considerable delay before it scrolls back to the top.

Is there any better way to achieve this functionality?

Any help would be much appreciated.

Thanks!

Edit
Report

2 Answers

102

I have tried lot but this one worked for me

list.smoothScrollToPosition(0);
answered 2012-08-10T05:44:24.213
2

as a workaround, you can create a new adapter containing the new regenerated data, then call ListView.setAdapter. after that call ListView.setSelection(n).

btw, the solution provided by commonsware is worked.

answered 2010-09-13T06:09:49.507

Your Answer