Android нет персистентности (нулевой пакет) во фрагменте - PullRequest
1 голос
/ 11 января 2012

Я только начал разрабатывать для платформы 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>

Когда пользователь выбирает элемент из 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();

Деятельность работает нормально, проблема в постоянстве. Я реализовал onSaveInstanceState () в выдающемся классе PreferenceFragment.

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();
}

Когда я нажимаю кнопку «Домой», вызывается метод onSaveInstanceState (). Но когда я возвращаюсь к PreferenceFragment, вызывается onActivityCreated (), но пакет все еще равен нулю. Я не могу объяснить, почему информация, которую я вставил в onSaveInstanceState, не сохраняется. Может быть, я допустил ошибку при реализации своего фрагмента, возможно, это происходит из-за того, как я запускаю его в основной деятельности. Я нашел несколько сообщений с той же проблемой с ListFragment, но без ответа.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 12 января 2012

Я думаю, что вызов onSaveInstanceState - это скорее упреждающий вызов в случае, если фрагмент / действие впоследствии уничтожается (скажем, из-за того, что ОС освобождает память) и должен быть восстановлен системой.Поскольку ваш фрагмент не уничтожается и не воссоздается, ему не нужно восстанавливать себя из сохраненного состояния.

...