Как передать параметры времени выполнения конструктору ViewModel при использовании Hilt для внедрения зависимостей?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как передать параметры времени выполнения конструктору ViewModel при использовании Hilt для внедрения зависимостей?

Сообщение Anonymous »

Мне интересно, как передать параметры времени выполнения конструктору ViewModel при использовании Hilt для DI? До использования Hilt у меня была ViewModel, которая выглядела так:

Код: Выделить всё

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")
}
Я создаю указанную выше ViewModel в своем фрагменте следующим образом:

Код: Выделить всё

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)
}
Если бы мой конструктор ItemViewModel не имел параметра itemId, моя ViewModel и фрагмент с использованием Hilt выглядели бы так:

Код: Выделить всё

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

@AndroidEntryPoint
class ItemFragment : Fragment() {
private val itemViewModel: ItemViewModel by viewModels ()
}
Я пытаюсь понять, как передать идентификатор itemId, полученный из NavArgs ItemFragment, в конструктор ItemViewModel? Есть ли способ сделать это с помощью Hilt?

Подробнее здесь: https://stackoverflow.com/questions/652 ... g-hilt-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»