Список макетов фрагментов <-> Подробности
Я хочу реализовать макет, который имеет следующий дизайн:
Пейзаж: список предметов слева, подробности справа
Портрет: список предметов, только детали после клика
Чтобы заставить это работать, я следовал этим урокам: Урок 1 Урок 2
Сработало как положено.
Но вместо того, чтобы начинать новое действие в портретной ориентации и щелкать элемент списка, я хочу, чтобы фрагмент был заменен деталями, чтобы я мог анимировать переход.
Так что я поиграл и получил проблемы с видами. После этого я прочитал следующую статью и изменил свой макет, чтобы использовать заполнители и программно добавлять фрагменты: Статья
Действие, которое запускается при нажатии на элемент списка, просто заменяет фрагмент списка в его контейнере фрагментом подробности.
Но теперь, если я вернусь к альбомной ориентации, часть списка макета показывает детали вместо списка, потому что я заменил содержимое.
Есть ли способ решить эту проблему?
На данный момент мне удалось заставить это работать, используя два заполнителя фрагментов в макетах, альбомном и портретном, с обтеканием контентом, и скрывая и показывая фрагменты, но я не знаю, является ли это правильным подходом? Возможно, ViewFlipper будет лучше?
Также анимация здесь не работает должным образом, потому что я скрываю и показываю в той же транзакции.
Также, если я нахожусь в ландшафтном режиме и щелкаю по элементу списка, и данные отображаются, и я возвращаюсь к портрету, я хочу, чтобы отображалось представление данных, а не список, а ТОЛЬКО, если данные уже показаны.
Я справился с этим с помощью флага, переданного в данные о намерениях, и снова показал / скрыл правильное представление.
Есть альтернативные идеи?
Большое спасибо, пытаюсь часами!
РЕДАКТИРОВАТЬ Основная проблема, с которой я столкнулся, заключается в том, что установленная мной анимация слайда / входа воспроизводится неправильно, поскольку я скрываю и показываю фрагменты в одной транзакции. Он просто скрывает один фрагмент и скользит в другом, поэтому первый фрагмент не выдвигается: /
Чтобы понять, что я имею в виду, вот как я реализовал это в тестовом приложении фрагмента:
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/details_Fragment_Placeholder"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
</FrameLayout>
<FrameLayout
android:id="@+id/main_Fragment_Placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
</LinearLayout>
ListFragment onListItemClick:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
FragmentManager fragmentManager = getFragmentManager();
Screen2Fragment fragment2 = (Screen2Fragment) fragmentManager
.findFragmentByTag(Screen2Fragment.TAG);
if (fragment != null) {
if ((getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)) {
.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right,
R.anim.slide_out_left, android.R.anim.slide_in_left,
android.R.anim.slide_out_right);
Screen1ListFragment fragment1 = (Screen1ListFragment) fragmentManager
.findFragmentByTag(Screen1ListFragment.TAG);
transaction.hide(fragment1);
transaction.show(fragment2);
transaction.addToBackStack("ReturnToScreen1");
transaction.commit();
}
}
}
1 ответ
При первоначальном размещении фрагмента списка необходимо поместить его в задний стек, а затем переопределить кнопку "Назад" в фрагменте сведений, чтобы при нажатии вывести представление списка из заднего стека.