TL; DR: Jak powinny wyglądać i działać aplikacje na wielowarstwowe aplikacje z głęboką nawigacją podobną do aplikacji Spotify na Androida i jak ją wdrożyć?Jak napisać wielozadniową aplikację dla systemu Android z bardzo głęboką nawigacją?
Długa wersja: pracuję nad aplikacją, w którym użytkownik widzi listę elementów i może wniknąć głębiej w tych elementach. Te strony szczegółów przedmiotów mogą ponownie otwierać listy powiązanych elementów, które z kolei mają strony szczegółowe i tak dalej. W aplikacji na telefonie, to byłoby odrębne działania, które może wyglądać i połączyć ze sobą tak:
W tych makiet, użytkownik widzi wstępny przegląd, a następnie wybiera „Item # 2” z pierwsza lista. Otworzy się nowe działanie, pokazujące mu szczegóły dotyczące przedmiotu nr 2. Tutaj wybiera listę rzeczy związanych z pozycją # 2. Nowo otwarta aktywność na trzecim obrazku pokazuje tę listę, a kliknięcie otwiera szczegóły dotyczące tej rzeczy. Potrafi poruszać się tak głęboko w treści, jak mu się podoba.
Działa to całkiem dobrze w zwykłych działaniach Android. Pracuję nad przeniesieniem aplikacji na tablety i zastanawiam się, jak najlepiej to wdrożyć. Plan polega na utworzeniu układu wielopanowego z tą samą koncepcją. Jest bardzo podobny do sposobu działania aplikacji Spotify na iPada (ciekawe będzie, jak wprowadzą ją na Androida po utworzeniu układów przeznaczonych dla tabletów).
W układzie tabletu każde kliknięcie nazwy elementu lub listy otwiera odpowiedni element potomny jako nowy panel, który wyświetla się z prawej strony. To samo workflow jak w powyższym przykładzie będzie wyglądać następująco:
jestem pewien, jak najlepiej wdrożyć ten schemat nawigacyjny. Aplikacje wielopanelowe o ograniczonej głębokości nawigacji, takie jak GMail, mogą być budowane za pomocą statycznej ViewGroup (LinearLayout byłoby ok) zawierającej wszystkie fragmenty, a zagłębianie się w nawigacji zastępuje zawartość następnego kontenera po prawej stronie i animuje do tego (zobacz CommonWares implementation of this on SO).
Sugeruje to, że niestandardowy ViewGroup będzie do zrobienia. Jeśli ma wyświetlić podstronę (np. "Lista rzeczy"), tworzy nowe dziecko w grupie View, która jest o połowę szersza od ekranu z fragmentem, a następnie przewija widoczny obszar tak, aby okienko, które właśnie wchodziło w interakcję i nowe dziecko jest widoczne. W tym celu odwołuje się prawidłowo do FragmentTransaction, tak że tylna stos działa poprawnie, to myślę, że byłoby coś takiego:
View newPane = container.addChild();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(newPane, new ListOfThingsFragment(2));
ft.remove(paneOnRight, fragmentOnRight);
ft.commit();
container.animateToRight();
nie widzę sposób to zrobić animację wewnątrz FragmentTransaction.
Informacje zwrotne są mile widziane. Mój pracodawca jest ogólnie przychylny w odniesieniu do otwartych struktur zaopatrzenia, które rozwijamy, więc jeśli jest to coś, co jest bardziej interesujące i jeśli mogę wymyślić rozwiązanie wielokrotnego użytku, chętnie podzielę się tym.
bardzo interesujące pytanie, będę szukał możliwych odpowiedzi tutaj. Szybka obserwacja: jeśli zachowasz wszystko w jednym działaniu na telefonie i tabletach, zaoszczędzisz trochę kłopotów, ponieważ ActA musi to zaimplementować, następnie B to zrealizuje. To tylko jeden, który implementuje wszystko i wykonuje wszystkie transakcje fragmentacyjne. – Budius