片段中的Android无持久性(空捆绑包)

片段中的Android无持久性(空捆绑包),android,persistence,bundle,android-fragments,android-preferences,Android,Persistence,Bundle,Android Fragments,Android Preferences,我刚开始为Android平台开发。对于我正在处理的应用程序,我使用一个带有以下.xml文件的活动来管理应用程序属性 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_pa

我刚开始为Android平台开发。对于我正在处理的应用程序,我使用一个带有以下.xml文件的活动来管理应用程序属性

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <fragment class="fr.berard.preference.ManagePreferenceActivity$PreferenceMenuFragment"
            android:id="@+id/titles" android:layout_weight="20"
            android:layout_width="0px" android:layout_height="match_parent" />

    <FrameLayout android:id="@+id/details" android:layout_weight="80"
            android:layout_width="0px" android:layout_height="match_parent"
            android:background="?android:attr/detailsElementBackground" />

</LinearLayout>
活动进行得很好,问题在于坚持。我在extanding PreferenceFragment类中实现了onSaveInstanceState()

public final String WRONG_CARD_KEY = "wrong_card_value";

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    if (savedInstanceState != null) {
        if (savedInstanceState.containsKey(WRONG_CARD_KEY)) {
            Toast.makeText(this.getActivity(), " loaded", Toast.LENGTH_SHORT).show();
        }
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);

    savedInstanceState.putString(WRONG_CARD_KEY, "test");
    Toast.makeText(this.getActivity()," saved", Toast.LENGTH_SHORT).show();
}
当我按下home按钮时,会调用onSaveInstanceState()方法。但是当我回到PreferenceFragment时,会调用onActivityCreated(),但bundle仍然为null。 我无法解释为什么我在SaveInstanceState中输入的信息没有保存。也许是我在实现我的片段时犯了一个错误,也许是因为我在主要活动中启动它的方式。 我发现一些帖子与ListFragment有同样的问题,但没有答案


感谢您的帮助。

我认为
onSaveInstanceState
调用更像是一种先发制人的调用,以防片段/活动随后被破坏(例如由操作系统回收内存)并需要由系统还原。由于您的片段没有被销毁和重新创建,它不需要从保存状态中恢复自身。

我的问题是,当我手动更改PreferenceFragment中的值时(例如,向首选项添加摘要),当我返回首选项时,摘要消失。未使用PreferenceFragment,但您能否在onDestroyView中保存实例数据中的状态(例如确保最新),然后从onCreateView中保存的状态还原片段。。。
public final String WRONG_CARD_KEY = "wrong_card_value";

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    if (savedInstanceState != null) {
        if (savedInstanceState.containsKey(WRONG_CARD_KEY)) {
            Toast.makeText(this.getActivity(), " loaded", Toast.LENGTH_SHORT).show();
        }
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);

    savedInstanceState.putString(WRONG_CARD_KEY, "test");
    Toast.makeText(this.getActivity()," saved", Toast.LENGTH_SHORT).show();
}