У меня есть макет, содержащий фрагмент:Фрагмент с retainInstance = верно, но OnCreate называется
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/ID"
class="com.teovald.app.MyFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
</FrameLayout>
Я установить этот вариант использования setRetainInstance (истина) в этом фрагменте OnCreate метод:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setRetainInstance(true);
....}
И наконец, я восстанавливаю ссылку на этот фрагмент в своей деятельности по созданию:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
FragmentManager fragmentManager = getSupportFragmentManager();
mFragment = (MyFragment) fragmentManager.findFragmentById(R.id.ID);
...
}
Однако e ach time Я вращаю свое устройство, onCreate активности вызывается, затем onCreate фрагмента также называется! Поскольку я установил setRetainInstance в true, это не должно происходить. Есть ли причина для такого поведения?
Это может иметь что-то делать с жизненным циклом и, как все завышены из XML ... Вы могли бы рассмотреть возможность сделать 'FragmentManager fragmentManager = getSupportFragmentManager(); mFragment = (MyFragment) fragmentManager.findFragmentById (R.id.ID); 'in' onStart()' или 'onResume' вместо этого ... – JRaymond
Спасибо за предложение. Однако оставить только super.onCreate & setContentView не помогло. Не заменяет ActionBarSherlock и библиотеку совместимости на последние библиотеки баз данных. Это должно быть что-то еще, но у меня заканчиваются варианты: - / – Teovald