TL; ДР: Как многоуровневые приложения с глубокой навигацией, похожими на приложение Spotify iPad, выглядят и работают на Android, и как это реализовать?
Длинная версия: Я работаю над приложением, где пользователь видит списки элементов и затем может углубиться в эти элементы. Эти страницы подробностей элементов могут снова открывать списки связанных элементов, которые, в свою очередь, содержат подробные страницы и т.д. В качестве приложения для телефона это будут отдельные действия, которые могут выглядеть и связываться друг с другом следующим образом:
В макетах пользователь видит начальный обзор, а затем выбирает "Item # 2" из первого списка. Открывается новая активность, показывающая детали для позиции №2. Здесь он выбирает, чтобы увидеть список вещей, относящихся к Item # 2. В этом новом списке отображается действие openend на третьем рисунке, и щелчок по нему открывает подробности для этой вещи. Он может перемещаться так глубоко в контент, как ему нравится.
Это хорошо работает с обычными действиями в Android. Я работаю над приложением приложения к планшетам и думаю о том, как наилучшим образом реализовать это. План состоит в том, чтобы создать многопанельный макет с той же концепцией. Это очень похоже на то, как работает приложение iPad Spotify (будет интересно посмотреть, как они доводят его до Android после создания табло-специфических макетов).
В макете планшета каждый щелчок по имени элемента или списка открывает соответствующий дочерний элемент в качестве новой панели, которая анимируется справа. Тот же рабочий процесс, что и в приведенном выше примере, будет выглядеть так:
Я не уверен, как лучше всего реализовать этот шаблон навигации. Многоуровневые приложения с ограниченной навигационной глубиной, такие как GMail, могут быть созданы с помощью статической ViewGroup (LinearLayout будет в порядке), содержащей все фрагменты, и глубже погружаясь в навигацию, заменяет содержимое следующего контейнера вправо и анимирует его (см. Реализация CommonWares этого на SO).
Это говорит о том, что пользовательская группа ViewGroup станет для вас способом. Если он должен отображать подстраницу (т.е. "Список вещей" ), то он создает новый дочерний элемент в ViewGroup, который на половину ширины экрана с фрагментом, а затем прокручивает видимую область, чтобы панель, с которой только что взаимодействовали и новый ребенок виден. Чтобы правильно связать это с FragmentTransaction, чтобы задний стек работал правильно, я бы предположил, что это будет примерно так:
View newPane = container.addChild();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(newPane, new ListOfThingsFragment(2));
ft.remove(paneOnRight, fragmentOnRight);
ft.commit();
container.animateToRight();
Я не вижу способ сделать анимацию внутри FragmentTransaction.
Обратная связь. Мой работодатель в целом благоприятен в отношении открытых исходных рамок, которые мы разрабатываем, поэтому, если это то, что имеет более широкий интерес, и если я могу придумать многоразовое решение, я был бы рад поделиться им.