您的位置:首页 > 移动开发 > Android开发

android ListView数据变动后保持屏幕位置不变(类似QQ对话列表)

2014-09-01 17:49 417 查看
在网上找的所谓三种方法都不靠谱,比如在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中,列表保存内容不变,用户再慢慢下拉看之前刷下来的内容。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: