Robię aplikację, gdzie mam zaimplementowane Navigation View.
W bocznym menu mam 5 różnych opcji do wybrania, każda z tych opcji tworzy nowy fragment.
W nadpisanej metodzie onNavigationItemSelected(MenuItem item) mam switcha z moimi 5 opcjami, gdzie tworzę fragmenty. Przykład
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new ItemsFragment()).commit();
Za switchem gdzie tworzę fragmenty wywołuję: drawerLayout.closeDrawer(GravityCompat.START);
I tutaj gdy przechodzę pomiędzy opcjami w menu, jak klikam na opcję, menu podczas chowania ma lagi.
Poszukałem informacji i wychodzi na to, że mogę nadpisać metodę onDrawerClosed(View drawerView) i dopiero w niej podmieniać fragmenty.
Zrobiłem tak i lagowanie nie występuje, menu chowa się płynnie, jednak zajmuje to chwilę i dopiero po zamknięciu menu startuję nowy fragment.
Pytania:
-
czy są jakieś alternatywy dla rozwiązania mojego problemu oprócz tworzenia fragmentu w metodzie onDrawerClosed(View drawerView)? Myślę sobie, że można by wywołać metodę, która zajęłaby się tworzeniem nowego fragmentu w innym wątku np poprzez AsyncTask(tą metodę umieściłbym w onNavigationItemSelected). Ma to sens? Fragmenty które mi się zacinają mają recyclerview z live datą, gdzie mam listę 50 elementów pobieraną z lokalnej bazy danych. Zapytanie jest proste. Recycler view i live data są zrobione zgodnie z dokumentacją. Uważam, że tu nie ma problemu i wszystko jest ok.
-
W momencie gdy użytkownik musi zaczekać aż jakaś operacja się zakończy planuję użyć ProgressBar. Będę go wyświetlał kiedy fragment(recyclerview 50 elementów + live data) mi się ładuje, czy ten widget jest ok? Nie podoba mi się sytuacja, że zamykam menu i czekam 1 - 2 sekundy aż fragment mi się pojawi.