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

          在网上找的所谓三种方法都不靠谱,比如在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中,列表保存内容不变,用户再慢慢下拉看之前刷下来的内容。。

你可能感兴趣的:(android,AChat项目)