我的主要 Activity 有 3 个图像按钮。这些充当选项卡/类别,单击时会弹出 3 个不同的 Activity 。我的主页选项卡上有一个 ListView ,其中填充了从网站提取的数据。该应用程序允许用户通过单击顶部的选项卡图标(这会弹出一个新 Activity )来导航类别。
我在 onSaveInstanceState 中使用了 .putStringArrayList(,) ,在 onRestoreInstanceState 中使用了 .getStringArrayList() 。
我的问题:
当我更新主页选项卡上的 ListView 时,单击顶部的另一个选项卡导航到新 Activity ,然后按“后退”硬键返回主页选项卡 Activity ,列表内容将保留。
但是,如果我更新列表,导航到新选项卡( Activity ),然后通过单击主页图标/选项卡(而不是硬“后退”键)导航回主页 Activity ,则列表内容会消失并且必须重新加载。
实际上,在我看来,即使用户感觉他要返回到上一个选项卡,应用程序也会假设它正在前进到该选项卡,并且那里会丢失一些数据。
如何解决这个问题?
谢谢!
这是我的代码:
int headlinessize;
int linkssize;
ArrayList<String> headlines = new ArrayList<String>();
ArrayList<String> links = new ArrayList<String>();
private ArrayAdapter<String> adapter;
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putStringArrayList("headlines", headlines);
savedInstanceState.putInt("headlinessize", headlinessize);
savedInstanceState.putStringArrayList("urls", links);
savedInstanceState.putInt("linkssize", linkssize);
super.onSaveInstanceState(savedInstanceState);
}
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainscreen);
if (savedInstanceState!= null){
headlines.addAll(savedInstanceState.getStringArrayList("headlines"));
links.addAll(savedInstanceState.getStringArrayList("urls"));
headlinessize=savedInstanceState.getInt("headlinessize");
linkssize=savedInstanceState.getInt("linkssize");
}
.
.
.
}
最佳答案
您应该使用应用程序的 PersistentState (SharedPreferences) 所以使 您的 Activity 上的 onPause() 方法并保存 SharedPreferences
SharedPreferences settings = getSharedPreferences("key", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.put....
然后 onCreate 检查 SharedPreferences.contains("key"); 并从那里重新加载数据
SharedPreferences settings = getSharedPreferences("key", MODE_PRIVATE);
settings.get...
关于java - 移动到新 Activity 并返回上一个 Activity 时保存字符串数组列表的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17842568/