我的申请中有 2 页。从页面 AI 调用页面 B。在页面 BI 上有一个由用户填写的 ListView。现在,当用户单击手机的后退按钮时,他会返回页面 A。但是当他单击菜单并再次选择添加项目时,它会打开页面 B,但我的 ListView 是空的。如何在不丢失 ListView 数据的情况下返回页面 B?
问问题
242 次
4 回答
1
覆盖onBackPressed
页面 B,并将数据保存在某个位置..
然后在onStart
页面 B 中重新加载数据..
于 2012-09-13T10:21:46.447 回答
0
您可以使用SharedPreferences在列表中保存和加载数据
IE
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor prefEditor = settingsActivity.edit();
prefEditor.putString(LISTFROMB, savedItems);
prefEditor.commit();
}
return super.onKeyDown(keyCode, event);
}
然后将其加载到 A 中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple);
// Find the ListView resource.
mainListView = (ListView) findViewById(R.id.list);
ArrayList<String> selectedItems = new ArrayList<String>();
SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);
String savedItems = settingsActivity.getString(LISTFROMB, "");
selectedItems.addAll(Arrays.asList(savedItems.split(",")));
[CALL YOUR ADAPTER HERE WITH THE SELECTED ITEMS LIST]
}
于 2012-09-13T10:37:17.383 回答
0
实现此目的的一种方法是使用SharedPreferences
:
public void onStop(Bundle bundle)
{
SharedPreferences mySharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putBoolean("myBool",true);
//Continue saving all the data you need to recreate the listView
}
然后,当您重新启动活动时,您可以在 OnCreate() 方法中重新加载首选项,如下所示:
public void onCreate(Bundle bundle)
{
SharedPreferences mySharedPreferences = getPreferences(MODE_PRIVATE);
// Retrieve the saved values.
boolean myBool = mySharedPreferences.getBoolean("myBool");
//Recreate the ListView here
}
这可能不是最干净的方法。但是由于onSavedInstanceState
不能在您的情况下使用,因此必须这样做:)
于 2012-09-13T10:38:21.950 回答
0
谢谢你的帮助。我通过在页面 A 中声明 ArrayList 解决了这个问题。所以现在当我回到页面 B 时,ListView 的源在页面 A 中,很容易将其加载回来。
不知道这种方法是否错误。如果您认为不应该这样做,请留下您的评论。
于 2012-09-13T11:57:49.347 回答