Wie übergebe ich Laufzeitparameter an den Konstruktor eines ViewModels, wenn Hilt für die Abhängigkeitsinjektion verwendAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie übergebe ich Laufzeitparameter an den Konstruktor eines ViewModels, wenn Hilt für die Abhängigkeitsinjektion verwend

Post by Anonymous »

Ich frage mich, wie man Laufzeitparameter an den Konstruktor eines ViewModels übergeben kann, während man Hilt für DI verwendet? Bevor ich Hilt verwende, habe ich ein ViewModel, das so aussieht:

Code: Select all

class ItemViewModel(private val itemId: Long) : ViewModel() {
private val repo = ItemRepository(itemId)
}

class ItemViewModelFactory(private val itemId: Long) : ViewModelProvider.Factory {
@Suppress("unchecked_cast")
override fun  create(modelClass: Class): T {
if (modelClass.isAssignableFrom(ItemViewModel::class.java)) {
return ItemViewModel(itemId) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
Ich erstelle das obige ViewModel in meinem Fragment wie folgt:

Code: Select all

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

val args: ItemScreenFragmentArgs by navArgs()
val itemId = args.itemId

//Create the view model factory
val viewModelFactory = ItemViewModelFactory(application, itemId)

// Get a reference to the ViewModel associated with this fragment.
val itemViewModel = ViewModelProvider(this, viewModelFactory).get(ItemViewModel::class.java)
}
Wenn mein ItemViewModel-Konstruktor nicht den itemId-Parameter hätte, würden mein ViewModel und mein Fragment mit Hilt so aussehen:

Code: Select all

class ItemViewModel
@ViewModelInject
constructor(private val repo: ItemRepository) : ViewModel() { }

@AndroidEntryPoint
class ItemFragment : Fragment() {
private val itemViewModel: ItemViewModel by viewModels ()
}
Ich versuche herauszufinden, wie ich die itemId, die ich von den NavArgs des ItemFragments erhalte, an den Konstruktor des ItemViewModel übergeben kann? Gibt es eine Möglichkeit, dies mit Hilt zu tun?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post