Как создать другой экземпляр модели представления для фрагментов в viewpager, ограниченный родительским фрагментом, с поAndroid

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

Сообщение Anonymous »

У меня есть фрагмент HomeFragment, который является частью графа навигации приложения. Внутри FragmentHome у меня есть пейджер с тремя экземплярами фрагмента одного и того же класса ChildFragment. Для каждого ChildFragment требуется экземпляр ChildViewModel, определенный следующим образом

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

@HiltViewModel
class ChildViewModel @Inject constructor(
private val repo: Repository
) : ViewModel() {

}
Как создать разные экземпляры моей модели просмотра ChildViewModel, ограниченной жизненным циклом HomeFragment места назначения навигации?
Я попробовал следующую строку. Но это использует один и тот же экземпляр модели представления для всех трех ChildFragments, что нежелательно.

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

private val vm by hiltNavGraphViewModels(R.id.homeFragment)
Насколько я понимаю, ViewModelStore использует ключ, который является каноническим именем модели представления, для ее сохранения. Есть ли способ использовать собственный ключ для каждого фрагмента, чтобы каждый ChildFragment получал свой собственный экземпляр?
Я тоже пробовал

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

private lateinit var vm: ChildViewModel

...

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
super.onCreateView(inflater, container, savedInstanceState)
parentFragment?.let {
vm = ViewModelProvider(it).get(args.sectionId, CihldViewModel::class.java)
}
}
Но это вызвало некоторое исключение, связанное с невозможностью создать экземпляр моей ViewModel. Я немного не знаком с использованием подхода Viewmodel Factory, поскольку Hitl позаботится об этом за нас.
Причина, по которой я хочу ограничить эту модель представления до пункта назначения навигации HomeFragment, заключается в следующем: saveState, чтобы я мог повторно использовать один и тот же соответствующий экземпляр модели представления для каждого дочернего фрагмента, когда пользователь возвращается в HomeFragment

Подробнее здесь: https://stackoverflow.com/questions/791 ... -scoped-to
Ответить

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

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

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

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

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