如何调用另一个意图而不丢失以前的数据?

时间:2012-09-13 10:18:47

标签: android eclipse

我的申请表中有2页。从页面A我调用页面B.在页面B上我有一个由用户填写的ListView。现在,当用户点击手机的后退按钮时,他返回到页面A.但是当他点击菜单并再次选择添加项目时,它会打开页面B,但我的ListView是空的。如何在不丢失ListView数据的情况下返回到页面B?

4 个答案:

答案 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中很容易加载回来。

不知道这种方法是否错误。如果您认为不应该这样做,请留下您的评论。