在网上找的所谓三种方法都不靠谱,比如在onScrollStateChanged事件中用lst_threads.getScaleX()获取最后位置,不知道为何我调试时在if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) 的时候无论getScaleX()还是getScaleY()均返回0。
不管怎样,我已经找到一种更好的替代方法:用getFirstVisiblePosition()获取当前第一条数据的位置和setSelectionFromTop()设置第一条数据的位置,看代码:
int w_cur_pos=lst_threads.getFirstVisiblePosition();
int w_top=lst_threads.getTop();
try {
if (pageNo == 1) {
Util.showToast(this, R.string.xlistview_err_01);
return;
}
lst_threads.setPageNo(pageNo - 1);
int w_cc=model.reloadData(ThreadActivity.this,mSubject,"",lst_threads.getPageNo(), pageSize, true);
if (w_cc!=0){
w_cur_pos=w_cur_pos+w_cc+1;
}
} finally {
lst_threads.stopRefresh();
onDone.run();
//lst_threads.resturePosition();
lst_threads.setSelectionFromTop(w_cur_pos,w_top);
}
这段代码放在下拉刷新的事件中,获得前一页的内容并加到当前的adapter中,列表保存内容不变,用户再慢慢下拉看之前刷下来的内容。。