В моем приложении Android я передаю пользовательские данные (UByteArray) из одного действия в другое, используя интерфейс для передачи.
Я использую эти данные внутри нескольких фрагментов, поэтому я переписал класс данных для расширения androidx ViewModel и открыть свойства LiveData для фрагментов. Теперь обновления пользовательского интерфейса намного приятнее, но я думаю, что использую их неправильно, потому что я перезаписываю все значения ViewModel внутри onCreate
.
Теперь мой вопрос: что мне нужно изменить, чтобы инициализировать ViewModel только один раз ? Ниже приведен мой текущий код (сокращенно и переименован для этого вопроса):
class ActivityB : AppCompatActivity() {
private val bData: ViewModelB by viewModels()
// ...
override fun onCreate(savedInstanceState: Bundle?) {
// ...
intent.getParcelableExtra<ViewModelB>("id")?.let {
Log.e(TAG, "Found parceled bData $it")
// This seems like a very stupid way to do it, is there a better one?
bData.copyAll(it)
}
}
}
Я видел, что можно вставить SavedState в конструктор ViewModelB, но у меня нет сохраненное состояние до сих пор, и данные должны быть переданы только один раз.
Должен ли я изменить инициализацию tagData с by viewModels()
на = ViewModelB(intent)
?
Или мне нужно как-то расширить ViewModelFactory ?
Любой совет здесь был бы очень признателен, спасибо.