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

博主分享了在Android开发中遇到的列表滚动位置获取不准确的问题,以及如何通过getFirstVisiblePosition()和setSelectionFromTop()方法实现下拉刷新时加载前一页内容的解决方案。代码示例展示了在下拉刷新事件中如何保持列表状态并加载更多数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值