0

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

4

4 回答 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 回答