Как указано в руководстве по Android, двойная панель может быть достигнуто двумя способами:
- Несколько фрагментов, одно действие
- Несколько фрагментов, несколько действий
Я использую первый случай (руководство по Android объясняет только второй случай).
Вот что происходит на 7-дюймовых планшетах:
- поворот из альбомной в книжную: воссоздается только фрагмент, состоящий из одной панели
- при повороте из книжной в альбомную: воссоздаются все 3 фрагмента (одинарная, двойная-мастерская, двойная-детальная)
Вопрос: почему однопанельный фрагмент (который я создаю программно, но использую FrameLayout, определенный в макете в качестве контейнера) воссоздается на двойной панели?
Я сообщаю ниже своей реализации:
/layout/activity_main.xml:
<FrameLayout
android:id="@+id/single_pane"
android:layout_width="match_parent"
android:layout_height="match_parent" />
/layout-w900dp/activity_main.xml:
<LinearLayout
android:id="@+id/dual_pane"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.example.MasterFragment"
android:id="@+id/master_dual"
android:tag="MASTER_FRAGMENT_DUAL_PANE"
android:layout_width="@dimen/master_frag_width"
android:layout_height="match_parent"/>
<fragment class="com.example.DetailFragment"
android:id="@+id/detail_dual"
android:tag="DETAIL_FRAGMENT_DUAL_PANE"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Это onCreate
в основном действии:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDualPane = findViewById(R.id.dual_pane)!=null;
FragmentManager fm = getFragmentManager();
if (savedInstanceState==null) {
// this is a non-UI fragment I am using for data processing purposes
fm.beginTransaction().add(new NonUiFragment(), DATA_FRAGMENT).commit();
}
if (!mDualPane && fm.findFragmentById(R.id.single_pane)==null) {
fm.beginTransaction().add(R.id.single_pane, new MasterFragment(), MASTER_FRAGMENT_SINGLE_PANE).commit();
}
}