我已由FragmentA托管ActivityA。当用户从选项菜单中选择一个项目时,将启动承载ActivityB的FragmentB。现在,我想通过覆盖String从boolean保留FragmentA和onSaveInstanceState(),因此当用户返回FragmentA时,将保留其信息。来自FragmentA的代码:@Overridepublic void onSaveInstanceState(Bundle savedInstanceState){ //LOGS SHOW THAT THIS IS ALWAYS CALLED WITH CORRECT VALUES super.onSaveInstanceState(savedInstanceState); savedInstanceState.putString("string", "example"); savedInstanceState.putBoolean("boolean", bool);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){ View v = inflater.inflate(R.layout.fragmentA, parent, false); //LOGS SHOW THAT THIS IS ALWAYS NULL if (savedInstanceState != null) { if (savedInstanceState.getString("text") != null) { mObject.setText(savedInstanceState.getString("string")); } bool = savedInstanceState.getBoolean("boolean"); } ...}通过阅读以前与我类似的问题:1)我决定放置代码以恢复onCreateView()中的信息,因为onCreate()不会总是被调用。 (尽管使用onCreate()中的代码进行测试也存在相同的问题。)2)我也没有调用setRetainInstance(true),因为这将导致Bundle savedInstanceState始终为null。3)我确保FragmentA的XML布局具有ID。此布局的各种子元素也具有ID。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragmentA" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> ...</LinearLayout>尽管如此,Bundle savedInstanceState始终为null。我在这里想念什么?任何帮助表示赞赏。谢谢! 最佳答案 使用onPause()保存您的永久数据,这是指您要永久保存的数据,因此,可以将其保存在SharedPreferences或Database中。另一方面,onSaveInstanceState会重新训练数据,以防万一某个活动被破坏并且您想取回该数据,那么最好的情况是用户填写表格。您在示例中说,您正在从Activity A导航到Activity B,然后返回到Activity A,当您第一次导航时,Activity A并没有被破坏,它只会发送到后台,因此当您返回它,它已经存在并且将被带到前台,您的值实际上应该在那里,并且onCreate和onCreateView不会被调用,因为Activity仍然存在(尽管在发生以下情况时可能会被杀死)设备内存不足)。最好的和最快的测试onSaveInstanceState的方法是最常用的方案,方向更改,方向更改将导致活动被完全破坏并重新创建,因此允许在Activity A上更改方向,在您的并旋转设备,现在这将从头开始调用您的所有方法saveStateBundle,onCreate,...等以创建具有适当布局的活动,您的onCreateView现在不应为null。请注意,这是假设您的应用程序仍在运行,如果您要完全关闭该应用程序并且仍然想要保留数据,则将您的信息放入savedInstanceState或SharedPreferences中,并在再次启动该应用程序时检索它们。//编辑1为了向您展示如何将值存储在应用程序中任何位置的Database中,即使关闭了应用程序,这些值也将保持不变。 (尽管onSaveInstanceState应该足以满足您的需求,但希望对您有所帮助)// SharedPreferenceSharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());// Storingpreferences.edit().putString("valueNameOrKey", StringValue).commit();// Retrievingpreferences.getString("valueNameOrKey", defaultValueToReturnInCaseThatKeyIsNotFound);//编辑2要从SharedPreferences中删除任何键/值对,可以执行以下操作:preferences.edit().remove("valueNameOrKey").commit();但是,请注意在检索值时会发生什么,因为键将不可用,因此它将返回默认值,如下所示:preferences.getString("valueNameoOrKey", ""); // "" Is my default value since I'm using a String由于您可以使用putString,putInt,putBoolean等,因此get函数也是如此,因此您的默认值必须与预期的返回类型匹配。