使用ScrollView进行项目滚动很容易,ScrollTo方法就完全可以达到效果。
查看ListView也有同样的方法,想当然认为也是一样的实现,所以使用ScrollTo()方法测试无数次。。。。结果证明,不好使。
ListView使用缓存机制显示UI,使用ListView的getChildren或者getAllViews方法,获取到的列表项目的数量,非常少。比如我的历史数据条数在1000条左右,但是ListView使用getChildren等方法获取到数量仅仅为7个(屏幕能够放下的项目数量),其余的都是使用同样的实例,仅仅修改其中的数据达到效果而已。
所以,要让ListView定位到指定的位置,可以使用 setSelection方法,可以传递一个参数,position,即你要定位到的项目位置。
/** Save the position **/
int currentPosition = listView.getFirstVisiblePosition();
//Here u should save the currentPosition anywhere
/** Restore the previus saved position **/
listView.setSelection(savedPosition);
当然,也可以使用这个方法:
// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
// ...
// restore
mList.setSelectionFromTop(index, top);
亲测好使!!能达到像QQ的那种效果