如何保存ListView的位置?
How to save ListView position?
我有自定义 ListView 我只是想在用户想要返回列表视图时保存滚动位置 activity 我在这里尝试了很多答案 none 他们为我工作。这是我的代码。
lst = findViewById(R.id.listview);
customListview customListview = new customListview(this, storynum,
storynam, imag);
lst.setAdapter(customListview);
我测试的一些答案
public void saveLastPosition() {
int position = lst.getLastVisiblePosition();
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("lastPosition", position);
editor.apply();
}
public void getLastPosition() {
int position = lst.getLastVisiblePosition();
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(this);
int lastPosition = pref.getInt("lastPosition", position);
lst.setSelection(lastPosition);
}
这是 activity 用户将按后退按钮返回列表视图 activity
case R.id.bar_back:
Intent intent = new Intent(this, ActivityS2.class);
startActivity(intent);
return true;
为这个方法编辑logcat
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.ListView.getLastVisiblePosition()' on a null object reference
at com.slltour.desar.qasharirh.ActivityS2.getLastPosition(ActivityS2.java:251)
at com.slltour.desar.qasharirh.ActivityS2.onCreate(ActivityS2.java:52)
感谢您的帮助
您正在从 getLastPosition 获取空值,因为您在初始化之前使用它。
lst.setAdapter(customListview);
if(getLastPosition!=0)
lst.smoothScrollToPosition(getLastPosition());
像这样修改你的方法
public int getLastPosition() {
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(this);
int lastPosition = pref.getInt("lastPosition", 0);
return lastPosition;
}
我有自定义 ListView 我只是想在用户想要返回列表视图时保存滚动位置 activity 我在这里尝试了很多答案 none 他们为我工作。这是我的代码。
lst = findViewById(R.id.listview);
customListview customListview = new customListview(this, storynum,
storynam, imag);
lst.setAdapter(customListview);
我测试的一些答案
public void saveLastPosition() {
int position = lst.getLastVisiblePosition();
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("lastPosition", position);
editor.apply();
}
public void getLastPosition() {
int position = lst.getLastVisiblePosition();
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(this);
int lastPosition = pref.getInt("lastPosition", position);
lst.setSelection(lastPosition);
}
这是 activity 用户将按后退按钮返回列表视图 activity
case R.id.bar_back:
Intent intent = new Intent(this, ActivityS2.class);
startActivity(intent);
return true;
为这个方法编辑logcat
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.ListView.getLastVisiblePosition()' on a null object reference
at com.slltour.desar.qasharirh.ActivityS2.getLastPosition(ActivityS2.java:251)
at com.slltour.desar.qasharirh.ActivityS2.onCreate(ActivityS2.java:52)
感谢您的帮助
您正在从 getLastPosition 获取空值,因为您在初始化之前使用它。
lst.setAdapter(customListview);
if(getLastPosition!=0)
lst.smoothScrollToPosition(getLastPosition());
像这样修改你的方法
public int getLastPosition() {
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(this);
int lastPosition = pref.getInt("lastPosition", 0);
return lastPosition;
}