• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

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

		}
	};



 



posted @ 2013-09-27 19:28  Class Xman  阅读(293)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3