我的申请表中有2页。从页面A我调用页面B.在页面B上我有一个由用户填写的ListView。现在,当用户点击手机的后退按钮时,他返回到页面A.但是当他点击菜单并再次选择添加项目时,它会打开页面B,但我的ListView是空的。如何在不丢失ListView数据的情况下返回到页面B?
答案 0 :(得分:1)
覆盖第B页中的onBackPressed
,并将数据保存在某些位置。
然后在页面B的onStart
重新加载数据..
答案 1 :(得分:0)
您可以使用SharedPreferences在列表中保存和加载数据
I.e
@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]
}
答案 2 :(得分: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
无法在您的情况下使用,因此必须执行:)
答案 3 :(得分:0)
感谢您的帮助。我只是通过在页面A中声明ArrayList解决了这个问题。所以现在当我回到页面B时,ListView的源代码在页面A中很容易加载回来。
不知道这种方法是否错误。如果您认为不应该这样做,请留下您的评论。