Где Fragment сохраняет свое состояние, когда FragmentTransaction.Replace?

Backgroud: у меня есть меню слева и различное прокручиваемое содержимое справа. я хотел сохранить прокручиваемую позицию. Но я не смог. Затем ...

Я создал очень простой проект для его тестирования.

На словах, у меня есть меню слева, и различное содержимое все держит<EditText> справа. (хотя одного и того же класса, они разных экземпляров)

В кодах(очень простой)

content.xml

<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Please save my text ..." />

ContentFragment.java

package ... import ...

public class ContentFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.content, container, false);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        System.out.println("Why this is NOT called ?");
        Log.v("onSaveInstanceState()", "outState = " + outState);
    }
}

и программа сгенерированаMenuFragment.java

package ... import ...

public class MenuFragment extends ListFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, new String[]{"Item 1", "Item 2", "Item 3"}));
    }
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        ((MainActivity) getActivity()).click();
    }
}

Наконец, нашMainActivity.java

package ... import ...

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null)
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.menu, new MenuFragment()).commit();
    }
    public void click() {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.content, new ContentFragment()  // everytime load a new instance
                ).addToBackStack(null).commit();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        System.out.println("... and this is NOT called neither :-/");
        Log.v("onSaveInstanceState()", "outState = " + outState);
    }
}

Чтобы проверить это, пожалуйста, НЕ поворачивайте ваше устройство.

Сначала выберите пункт из меню, затем введите что-нибудь в текстовое поле. Затем выберите другой элемент и введите что-нибудь еще раз. Повторите несколько раз. Затем вернитесь назад и ...

вы найдете ваши тексты ранее набранныеСПАСЕНЫ !!!

Не удивительно, что тексты сохранены ...

Но этоявляется удивлены тексты сохраненысо всемиonSaveInstanceState() функции НЕ называются.

Когда Android их спасreplaced поFragmentTransaction?

Если я хочу дополнительно сохранить некоторые данные в каждомFragment экземпляр (например, положение прокрутки), где я должен поставить свои коды?

Ответы на вопрос(1)

Ваш ответ на вопрос