Kiedy w Android wywoływany jest konstruktor Viewmodel?

0

Pytanie

Przeglądam tę tabelę kodową: https://developer.android.com/codelabs/android-lifecycles#6 W nim wyjaśniono, jak korzystać z SavedStateHandle w modelu widoku, aby przeżyć śmierć procesu. Konstruktor modelu prezentacji w następujący sposób:

    private SavedStateHandle mState;

    public SavedStateViewModel(SavedStateHandle savedStateHandle) {
       mState = savedStateHandle;
    }

I model prezentacji zainicjowany w akcji w następujący sposób:

    mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);

Gdy wywoływany jest konstruktor ViewModel? I jak model prezentacji dostaje savedStateHandle parametr modelu widoku?

Zmiany:

Znalazłem odpowiedź na swoje pytanie w tym blogu: https://www.rockandnull.com/viewmodel-savedstate/

Stwierdzono w nim, że jeśliSavedStateHandle czy jest to jedyny parametr w konstruktorze naszej modele reprezentacji by viewModels delegat automatycznie usług modelu prezentacji.

Jednak Jeśli mamy połączenie niestandardowych parametrów przekazanych platformą wdrażania zależności(Hilt), na przykład: repozytorium, kilka innych argumentów środowiska wykonawczego, na przykład: identyfikator wybranej kategorii i zapisany identyfikator stanu, aby pomóc nam przetrwać śmierć procesu w konstruktorze viewmodel - Jak możemy zapewnić wszystkie te parametry fabryce?

Proszę, podziel się mały przykład dla mojego zrozumienia

android android-lifecycle viewmodel
2021-11-24 03:13:47
1

Najlepsza odpowiedź

4

Tabela kodu, którą podążacie, jest przeznaczona do tego, aby zrozumieć konkretną koncepcję, a nie cały kod . Oni nie dają żadnej realizacji w odniesieniu do swoich wątpliwości , a mianowicie : jak ViewModel dostaje swoje ustawienia ?


Przegląd : Z powodu pewnej wewnętrznej realizacji ViewModel nie można przekazywać argumenty ViewModel bezpośrednio , zamiast tego trzeba stworzyć trzeci stopień , który zapewnia opcje ViewModel.


Odpowiedź na twoje wątpliwości :

Istnieją dwa podejścia, za pomocą których model prezentacji może dostać swoje ustawienia :

  1. Metoda Iniekcji Bez Zależności: Tutaj tworzysz klasę rozszerzającą ViewModelProvider.Fabryka. W kodzie tutaj można zobaczyć :
  mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);

Tutaj tworzy się klasa domyślnie , w którym argumenty nie są przekazywane .Ma to na celu inicjalizacji , która jest niekompletna sposób, podanymi w tabeli kodu do wyrażania potrzeb . Można uzyskać wiele wiedzy o jednej i tej samej koncepcji z pomocą tego artykułu :

https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel-8fabfec1aa4f

  1. Sposób Wdrażania Zależności: Teraz to najprostszy sposób zrealizować ViewModelProviders , jeśli wiesz, co to jest dźwignia platformy DI . Tutaj trzeba tylko opisywanie model prezentacji z pomocą @ViewModelInject i gotowe .Platforma DI w deseń stworzy ViewModelFactory zamiast tego, aby to robili .To jest przykład kodu, jak podasz parametry dla ViewModel z pomocą Hilt :

class SampleViewModel @ViewModelInject constructor(
                     @Assisted private val savedStateHandle: SavedStateHandle) : ViewModel() { }
2021-11-24 04:17:44

Ja отладил aplikacja z laboratorium kodu. To konstruktor jest wywoływany, choć nie przekazuję żadnych fabryk. Jak to możliwe? Kto przekazuje obsługi zapisanego stanu do konstruktora?
Neeraja Gandla

Czy możesz podzielić się linkiem do aplikacji ? Zabrakło aplikacji lokalnie w Android Studio ? Ponieważ link na github na kod , o którym mowa w codelab, wymienia niektóre przypadki użycia i ich rozwiązanie, pełnego rozwiązania, takiego kompletnego wniosku, nie istnieje
Karunesh Palekar

Możesz pobrać kod źródłowy tutaj: developer.android.com/codelabs/android-lifecycles#1
Neeraja Gandla

Także, proszę, zajrzyj do sekcji Edycji wydania
Neeraja Gandla

Cieszę się, że dostałeś odpowiedź .
Karunesh Palekar

Czy możesz powiedzieć coś więcej o swoim edycji ? Nie mam dokładnej treści, które chcesz wiedzieć . ViewModel zapewnia dodatkową funkcjonalność buforowania danych dla orientacji ekranu , dlatego , aby zapewnić, że te funkcje , twórcy musieli znaleźć sposób, w jaki oni to odkryli . Wszyscy programiści muszą często przechodzić przez takie przypadki w swojej karierze, mam nadzieję, że rozumiesz
Karunesh Palekar

Neeraja Gandla

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................