#java #android #android-intent #mvvm #viewmodel
#java #Android #android-намерение #mvvm #viewmodel
Вопрос:
У меня есть recyclerview, содержащий строки информации о фруктах, таких как название, цвет, вес, описание, соответствие блюд…
если я нажму кнопку, она должна загрузить эти значения строк в intent и перейти к startActivityForResult: EditActivity.
Ну, причина viewmodel заключается в том, чтобы предотвратить возврат вращения к значениям из GetIntent. Значения обновляются до sql только в mainactivity onreturnresultsomething… метод.
если я это сделаю «‘mviewmodel.name = intent.getStringExtra(name,»»):»‘ в mainactivity oncreate это просто перезаписало бы его при вращении, как если бы viewmodel вообще не было.
Я подумываю об использовании sharedpreferences, но есть способ получше, а androidviewmodel является антипаттером.
итак, из getintent, как мне добавить значения по умолчанию в viewmodel в editactivity и чтобы оно не возвращалось к этому при вращении?
спасибо всем!
Ответ №1:
поместите ваши значения в [SavedStateHandle]:https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle
mviewmodel.savedStateHandle.set("name",name)
прежде чем устанавливать значение, проверьте, равно ли оно нулю или нет, что-то вроде:
if(mviewmodel.savedStateHandle.get("name) == null){
mviewmodel.savedStateHandle.set("name",name)
}
вы можете проверить это здесь: https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate
Комментарии:
1. должен ли я поместить это в mainactivity oncreate?
Ответ №2:
Если вы используете текущий by viewModels
или базовый ViewModelProvider
шаблон, ваша ViewModel не будет воссоздана, поэтому вы можете добавить его в качестве параметра конструктора.
Проверьте ViewModelProvider.Фабрика для того, как это сделать. Кроме того, если вы планируете использовать Dagger, но у вас все еще есть параметры, которые вы хотели бы передать вручную, вы можете проверить эту библиотеку: https://github.com/halcyonmobile/ViewModelFactoryGenerator