我剛開始開發Android平臺。對於我正在處理的應用程序,我正在使用具有以下.xml文件的活動來管理應用程序屬性。Android沒有持久性(空包)在片段
<?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>
當用戶選擇從PreferenceMenuFragment的元件,其細節片段通過以下行加載:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
PreferenceFragment pdf = new CustomPreferenceFragment();
fragmentTransaction.replace(R.id.details, pdf);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();
活性工作正常,問題是來自於持久性。我在擴展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仍然是空的。 我無法解釋爲什麼我放入onSaveInstanceState的信息沒有保存。也許我在實施我的片段時犯了一個錯誤,也許它是從我在主要活動中開始它的方式而來的。 我發現一些與ListFragment相同的問題,但沒有答案。
謝謝你的幫助。
我的問題是,當我手動更改PreferenceFragment中的某個值(例如將摘要添加到首選項)時,當我回到首選項時,摘要消失。 – Jef2007 2012-01-13 10:10:26
尚未使用PreferenceFragment,但可以將實例數據中的狀態(比如確保最新)保存在onDestroyView中,然後從onCreateView中的已保存狀態恢復片段... – PJL 2012-01-13 10:15:35