Android ListView记录上次滑动时位置状态

本文介绍了一种在Android中更新ListView数据时保持其当前滚动位置的方法。通过使用Parcelable对象保存ListView的状态,在数据更新并重新设置Adapter后,调用onRestoreInstanceState()恢复之前的位置,从而改善用户体验。

在项目中,ListView需要即时的从服务器刷新数据,但是当用户滑动ListView时,每次刷新都会回到顶部(本次刷新数据不是在数据的list中添加新的数据,如果是这样可以采用adapter.notifyDataSetChanged()方法,也是从ListView当前位置向下添加,不会回到顶部,本次刷新listview数据是重新设置的adapter),用户体验不太好,查了一下,有一种可以保持ListView的滑动状态的方法,这样每次刷新ListView数据时不用回到顶部了,首先声明一个Parcelable对象(注:RefreshListView为自定义ListView,此处用法与普通ListView相同

Parcelable state;
refreshListView=(RefreshListView)findViewById(R.id.hall_3_list);
refreshListView.setAdapter(adapter);
refreshListView.setOnScrollListener(mScrollListener);
//用于保存状态,第一次设置适配器也要保存一次,避免没有滑动时造成空指针
state=refreshListView.onSaveInstanceState();

下面是滑动监听器,方便在滑动时保持状态

public OnScrollListener mScrollListener = new OnScrollListener() {

	@Override 
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		state = refreshListView.onSaveInstanceState();
		switch (scrollState) {
		case OnScrollListener.SCROLL_STATE_FLING:
			
			break;
		case OnScrollListener.SCROLL_STATE_IDLE:
			
			break;
		case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
			
			break;
		default:
			break;
		}
		adapter.notifyDataSetChanged();
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {

	}
};
当再次获取了数据刷新ListView时,重新设置Adapter

adapter=new Hall2Adapter(AuctionHallHome3.this, AllConstant.Get_getAuctionListByRoom_result);
refreshListView.setAdapter(adapter);
refreshListView.onRestoreInstanceState(state);


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值