Список макетов фрагментов <-> Подробности

Я хочу реализовать макет, который имеет следующий дизайн:

Пейзаж: список предметов слева, подробности справа

Портрет: список предметов, только детали после клика

Чтобы заставить это работать, я следовал этим урокам: Урок 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 ответ

При первоначальном размещении фрагмента списка необходимо поместить его в задний стек, а затем переопределить кнопку "Назад" в фрагменте сведений, чтобы при нажатии вывести представление списка из заднего стека.

Другие вопросы по тегам