Android - w jaki sposób rozwiązać Fragmenty i Activity?

0

Hej,
jestem w trakcie pisania aplikacji na Androida. Przebieg wygląda tak:
Użytkownik loguje się -> Pojawia się navigation drawer z funkcjonalnością aplikacji

Punkt pierwszy sprawdza kilka rzeczy. Na przykład czy użytkownik wcześniej się logował do aplikacji. Albo czy chce się zarejestrować w serwisie. Te klimaty.

Czytam dokumentację i zastanawiam się jak to rozwiązać pod kątem Activities i Fragmentów.
Otóż, najprostszą metodą byłoby robienie osobnego activity niczym okien i przeskakiwanie po kolejnych klatkach.
Ale z tego co widzę, takie podejście jest raczej nieprofesjonalne.

Myślałem o takim rozwiązaniu:
Uruchamiam Activity_main
W środku sprawdzam jak wygląda sprawa z zalogowaniem usera.
Jeśli w pamięci mam że się zalogował to z marszu przerzucam się do Core_activity, która bawi się Navigation Drawerem.
Jeśli nie, uruchamiam fragment z ekranem logowania.
Jeśli użytkownik nie ma kompletnie konta w serwisie, podmieniam fragment UserLogin na UserRegister. Potem automatycznie loguję z podanymi wcześniej danymi. Przechodzę do Core_activity.

Całość zamyka się w dwóch Activity. Pytanie brzmi: czy to nie jest przerost formy nad treścią?
Nie potrzebuję fragmentaryzacji ekranów logowania/rejestrowania bo tak czy inaczej nigdy nie powinny być na jednej stronie.

Aczkolwiek w dokumentacji widnieje taki obrazek:
user image

W tym rozwiązaniu interesuje mnie tylko telefon (zacznijmy od czegoś, prawda?).
Wedle tego powinienem dla każdego z etapów wprowadzania usera tworzyć zarówno nowy fragment jak i nowe Activity.

Jeśli nie interesuje mnie sklejanie interfejsu to czy powinienem w ogóle bawić się we fragmenty?

0

Wydaje mi się, że w Twoim przypadku użycie fragmentów nie jest konieczne. Fragmenty warto użyć, jeśli:

  • tworzysz interfejs graficzny z użyciem tabów (zakładek) - wtedy każdy tab (zakładka) jest osobnym fragmentem,
  • tworzysz osobny interfejs graficzny dla widoku pionowego i horyzontalnego w smartfonie,
  • tworzysz osobny interfejs graficzny dla smartfonów i osobny dla tabletów,
  • chcesz przeładować tylko jakąś wybraną część layoutu (np. po to, aby użytkownik szybciej otrzymał określone dane)

Przynajmniej ja tak zrozumiałem ten koncept.

W Twoim przypadku możesz stworzyć 2 osobne Activity na:

  • rejestrację
  • logowanie

Możesz do tego nawet wykorzystać wspólny layout, w którym będziesz tylko manipulował elementami (np. w przycisku podmienisz napis "login" na "register"). Wszystko zależy od tego, jakie są wymagania.
Miałem podobny problem w jednym z projektów. Aplikacja miała dość skomplikowany flow, w którym przechodziło się pomiędzy różnymi ekranami (Activity) w zależności od wielu kryteriów. Stworzyliśmy mechanizm do obsługi tego flow. Są już dostępne podobne rozwiązania do obsługi flow. Np. https://github.com/square/flow, tylko nie wiem, czy to spełnia Twoje oczekiwania. Sam tej biblioteki nie używałem. Niestety nie mogę tutaj pokazać kodu tego rozwiązania, o którym wspomniałem. Możliwe, że za jakiś czas wypuszczę na githubie jakąś osobną libkę open-source. ;)
Generalnie idea jest taka:

  • Tworzysz listę Activities
  • Każde Activity ma listę fabryczek (może mieć nawet jeden element na tej liście),
  • Fabryczki tworzą konkretne Activity za pomocą metody create(),
  • Każda fabryczka ma metodę boolean canHandle() - w tej metodzie podajesz kryteria utworzenia fabryczki (np. if(isLogged) { return true; } albo retrun isLogged;). Możesz też podać więcej warunków, jeśli jest taka potrzeba.

Gdy dobrze opiszesz cały flow na wspomnianej liście, to aplikacja będzie śmigać sama i rozpoznawać kiedy co ma uruchomić. Listę możesz sobie opisać nawet w JSON-ie i tworzyć instancje klas za pomocą refleksji, a potem napisać apkę, która namaluje Ci diagram flow w JavaScripcie. Jest to świetne rozwiązanie dla projektów, które mają skomplikowany flow. Nie wiem, jak bardzo skomplikowany jest Twój projekt. Jeśli chcesz rozróżnić tylko logowanie i rejestrację, to może prościej będzie ustawić jakąś flagę np. w Twojej klasie dziedziczącej po Application, a potem w zależności od tej flagi uruchamiać jedno albo drugie Activity i to załatwi sprawę. Jeśli masz wiele warunków do spełnienia i musisz przechodzić w określonej kolejności pomiędzy ekranami, to wcześniej wspomniane rozwiązanie może się sprawdzić.

Nie wiem, czy trochę nie odbiegłem od tematu, ale mam nadzieję, że ten wpis będzie pomocny. ;)

Pozdrawiam.

0

W najnowszej wersji SDK dla Androida przy tworzeniu nowego Activity użycie fragmentów jest już konieczne. Oprócz activity tworzony jest fragment w nim osadzony. Denerwuje mnie to strasznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0