片段中的Android无持久性(空捆绑包)
我刚开始为Android平台开发。对于我正在处理的应用程序,我使用一个带有以下.xml文件的活动来管理应用程序属性片段中的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
<?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();
}