Android listView scroll 恢复滚动位置

相信大家尝试过许多方法恢复滚动位置,本人也找了许多方法,唯有这个方法好用,下面把代码贴出来

声明两个变量

 

private int mPosition;

private int lvChildTop;

 

pause , resume方法

 

        @Override

	public void onPause() {

		// TODO Auto-generated method stub

		super.onPause();



		SharedPreferences mySharedPreferences = activity.getSharedPreferences(MY_PREFS, Activity.MODE_PRIVATE);

		SharedPreferences.Editor edit = mySharedPreferences.edit();

		edit.putInt("mPositionChildTop", lvChildTop);

		edit.putInt("mPosition", mPosition);



		edit.commit();

	}



	@Override

	public void onResume() {

		// TODO Auto-generated method stub

		super.onResume();



		SharedPreferences mySharedPreferences = activity.getSharedPreferences(MY_PREFS, Activity.MODE_PRIVATE); // MY_PREFES 是声明的字符串

		lvChildTop = mySharedPreferences.getInt("mPositionChildTop", 0);

		mPosition = mySharedPreferences.getInt("mPosition", 0);

		listMessage.setSelectionFromTop(mPosition, lvChildTop); // listMessage 是listview ,

	}

 


listview 的监听事件

 

private OnScrollListener lvScrollListener = new OnScrollListener() {



		@Override

		public void onScrollStateChanged(AbsListView view, int scrollState) {

			// TODO Auto-generated method stub

			// 不滚动时保存当前滚动到的位置

			if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {

				mPosition = listMessage.getFirstVisiblePosition();

				View v = listMessage.getChildAt(0);

				lvChildTop = (v == null) ? 0 : v.getTop();

			}

		}



		@Override

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

			// TODO Auto-generated method stub



		}

	};



 



你可能感兴趣的:(Android listView scroll 恢复滚动位置)