С помощью модели представления и фрагмента ktx вы можете разместить общую модель представления между родительским фрагментом и дочерним фрагментом, поэтому вместо того, чтобы ваша деятельность содержала экземпляр модели представления и сохраняла данные до завершения этой активности, вы можете хранить модель представления в родительском фрагменте. фрагмент, делая это, когда вы извлекаете фрагмент, который создал экземпляр модели представления, модель представления будет очищена
Импорт
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.1'
ParentFragment (хост SharedViewModel)
class ParentFragment:Fragment() {
private val model: SharedViewModel by viewModels()
}
Детский фрагмент
class ChildFragment:Fragment(){
private val model: SharedViewModel by viewModels ({requireParentFragment()})
}
Таким образом, при этом будет размещена модель sharedviewmodel в родительском фрагменте, а дочерний фрагмент, зависящий от этого родительского фрагмента, будет иметь доступ к тому же экземпляру SharedViewModel
, и когда вы вытолкнете (то есть уничтожите фрагмент), ваш метод onCleared()
сработает на вашем viewmodel и эта shareviewmodel будут очищены, а также все их данные.
Таким образом, у вас нет MainActivity для хранения всех данных, которыми делятся фрагменты, и вам не нужно очищать эти данные каждый раз, когда вы оставляете фрагмент, который использует SharedViewModel
Теперь в альфа-версии вы можете передавать данные между навигациями, используя также модель представления, которая будет сохранять данные между навигациями, скажем, вы хотите обмениваться данными между фрагментом B и фрагментом A, теперь вы можете сделать это просто с помощью двух строк
https://developer.android.com/guide/navigation/navigation-programmatic#returning_a_result
person
Gastón Saillén
schedule
21.03.2020