История във всеки раздел или множество backstack

всеки

С пускането на android 3.0 (Api Level 11), фрагменти се появиха в android и така разработчиците на google получиха, че само един backstack се поддържа за тях. Не винаги дизайнерите и клиентите искат да вземат предвид тази функция. И понякога просто искат пълно копие на съществуващо ios приложение.

Да приемем, че трябва да направим сходство с лентата с раздели на Android, включително да запазваме история във всеки раздел. Но имаме един backstack, така че какво да правим? Задачата изглежда невъзможна.

Проучване

„Ако не питаш, никога не знаеш. Ако знаете, просто трябва да попитате. "

От една страна, това противоречи на официалното ръководство (вж. Поведение), което ясно казва, че навигацията през дъното трябва да нулира състоянието.
Но на кого му пука, когато става въпрос за потребителски опит? Честно казано, вие признавате, че препоръчаният начин е по-удобен?

И как можете да направите нещо, което да изглежда невъзможно поради ограниченията на платформата? Идват ми на ум няколко опции, едната е по-сложна от другата, а търсенето в Google дава още по-ужасни решения за патерици.

Но защо да се чудите дали можете да шпионирате как се прави Instagram? Между другото, Instagram не винаги работеше по този начин, имаше моменти, когато дизайнът на Instagram беше разделен и историята беше нулирана при превключване.

Декомпилираме apk Instagram с помощта на apktool и виждаме какво има. Основната дейност на приложението е com.instagram.android.activity.MainTabActivity, нека видим от какво е наследено - от класа com/instagram/base/activity/tabactivity/a, който от своя страна се наследява от android/app/ActivityGroup. Не е нужно да копаете по-нататък.

Класове като ActivityGroup, TabActivity, LocalActivityManager - оттеглени с ниво 13 Api, т.е. почти веднага, когато се появиха фрагменти. Developer.android.com казва следното за тези класове:

Този клас е остарял в API ниво 13.
Вместо това използвайте новите API на Fragment и FragmentManager; те се предлагат и на по-стари платформи чрез пакета за съвместимост с Android.

Всички знаят, че използването на оттеглено в нова разработка не е добро. Всички се втурнаха да пишат на фрагменти и класовете бяха изпратени до забрава.

Навсякъде се твърди толкова упорито, че фрагментите са всичко за нас, а тенденцията за разработване на приложение за единична дейност е толкова неизменна, че тези, които са се присъединили към разработката на Android след 2011 г., най-вероятно просто не са чували нищо за LocalActivityManager.

Това е просто решение, глупаво е да не го използвате. Във всеки раздел ще имаме собствена дейност със собствен жизнен цикъл и най-важното - задника си!

Някакъв код

Използването на TabHost е лесно. Ако знаете какво да търсите, има много древни уроци за това как да го използвате. Интернет помни.

Оформление за нашата основна дейност:

Жалко, че трябва да използвате остарели класове, но докато Google не направи друго решение, това е единствената адекватна опция. Възможно е да се изгради удобна навигация с един backstack, има и други разумни ограничения на платформата, които трябва да се вземат предвид и които са разумни, но в този случай изглежда, че Google просто е пропуснал такава възможност при проектирането на Fragment Api.

Случва се така, че в този момент Android със сигурност не беше по-готин от iphone ...