Эврика! Мое решение состоит в том, чтобы предоставить альтернативный макет для Подробности деятельности, который был пустым. После того, как я надуваю макет, я могу проверить, находится ли ожидаемый фрагмент в макете, а если нет, то я заканчиваю ().
details_view.xml в / res / layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
android:name="com.website.DetailsFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/details_fragment"
android:layout_weight="75">
</fragment>
</LinearLayout>
details_view.xml в / res / layout- [размер экрана]
Это для экрана любого размера, который вы не хотите отображать фрагмент Details в своем собственном действии в альбомном режиме (более или менее планшетов в моем случае).
<?xml version="1.0" encoding="utf-8"?>
<!-- Note: This file has an empty layout to notify
DetailsViewActivity that we should go back to landscape
and view the fragments side by side -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
</LinearLayout>
Просто поместите пустой файл details_view.xml в любой каталог макета, в котором есть файл макета, позволяющий отображать фрагменты рядом.
Наконец, код для DetailsViewActivity для выхода, если мы хотим вернуться бок о бок:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details_view);
mDetailsView = (TopicViewFragment)getSupportFragmentManager()
.findFragmentById(R.id.details_fragment);
// We can handle the fragments side by side in the previous activity
// so lets go back there
if ((mDetailsView == null || !mDetailsView.isInLayout()) &&
getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
finish();
return;
}
Мне бы хотелось немного меньше дублирования данных, но это неплохое решение. Это только заставляет вас скопировать один дополнительный файл макета в тот же каталог, в котором у вас есть файл макета рядом друг с другом фрагментов. Не так уж и плохо.