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

来源:互联网 发布:java 根据ip获取地区 编辑:程序博客网 时间:2024/05/17 01:42

在项目中,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();}@Overridepublic 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);


原创粉丝点击