Bentornati.
Tutto funziona bene.
Ma c'è un grosso problema.
Abbiamo un repository all'interno del costruttore del ViewModel.
Questo è un grosso problema, perché i Viewmodel non possono essere
istanziati direttamente da qualsiasi classe o attività se accettano parametri.
Per risolvere questo problema, dobbiamo creare un factory ViewModel.
Andare allo stesso pacchetto del ViewModel.
Creare una nuova classe Kotlin chiamata movie ViewModel factory.
Se il ViewModel richiede parametri aggiuntivi, come un repository o un contesto,
è necessario creare un factory di ViewModel provider per gestire l'istanziazione.
Quindi dobbiamo passare lo stesso parametro che il ViewModel
accetta all'interno del costruttore del factory private val repository.
È di tipo repository e questa classe factory sarà un factory
se la estendo da un provider di ViewModel dot factory.
Devo sovrascrivere una funzione chiamata create.
Quindi la prima è una funzione di creazione che accetta una classe modale di tipo T di tipo generico.
Non preoccupatevi, non vi addentrerete in questi codici perché fungono da modello.
Vengono utilizzati per creare un'istanza del ViewModel.
Dobbiamo impostare la classe modale e verificare se è assegnabile dalla classe ViewModel del film a Java.
Dobbiamo restituire il filmato ViewModel.
Passare il repository come T, altrimenti dobbiamo lanciare l'eccezione di argomento illegale della classe modale.
Questa classe del ViewModel che il factory deve creare.
Viene passato come argomento al metodo create ed è assegnabile da questo metodo.
Verifica se la classe modale è uguale alla classe ViewModel del film, dot Java, o una sua superclasse.
Questo assicura che il ViewModel del filmato possa essere lanciato in modo sicuro al tipo di classe modale.
Qui abbiamo un calco non controllato Alt+invio per aggiungere un calco non controllato.
Per questa affermazione, fare clic su invio e si può notare che questa
annotazione sopprime l'avviso di cast non selezionato che il compilatore Kotlin genererà.
Quindi il cast dal film ViewModel a T, il tipo generico del ViewModel non
è controllato, il che significa che il compilatore non può garantirne la sicurezza.
Utilizzando questa annotazione, si riconosce il rischio potenziale e si
sopprime l'avviso Ritorno del repository del filmato ViewModel come T.
Si crea una nuova istanza di View Movie ViewModel, passando
il repository come parametro al suo costruttore e come D.
Questo calco l'istanza di ViewModel del filmato a T.
Ci si aspetta che il metodo create del factory restituisca un'istanza di tipo T, quindi questo
cast è necessario quando viene chiamato il metodo create del factory ViewModel di questo film, che
riceve un parametro della classe model che indica il tipo di ViewModel da creare nel codice.
Controlla se la classe del modello è assegnabile dal ViewModel del film, cioè verifica se
è possibile creare un'istanza del ViewModel del film per la classe del modello data.
Se il controllo passa, crea una nuova istanza del film ViewModel usando
il repository fornito e lo restituisce, lanciandolo al tipo T previsto.
Questo cast è necessario perché create è un metodo
generico e deve restituire un'istanza del tipo richiesto.
Questo pattern è essenziale nei casi in cui i modelli di vista richiedono dipendenze che devono essere
fornite in fase di esecuzione, garantendo una separazione pulita delle preoccupazioni e una corretta iniezione delle dipendenze.