我想从一个片段到另一个片段共享一些整数值。我不想在设备更改配置时丢失数据。
因此,我遇到并想知道哪一种更适合我的用例的两种方法是:
ViewModel
1.在多个分片之间共享a
class SharedViewModel : ViewModel(){
...
}
class FragmentA : Fragment(){
private val model: SharedViewModel by activityViewModels()
...
}
class FragmentB : Fragment(){
private val model: SharedViewModel by activityViewModels()
...
}
2. 结合使用 SafeArgs 和自定义ViewModelProvider.Factory
使用 SafeArgs 将数据作为参数传递给从片段(例如 A)到另一个片段(例如 B)的导航操作。片段 B 的实现ViewModel
(参数化)和ViewModelFactory
类。将数据从 SafeArgs 传递到 ViewModelFactory 以创建 ViewModel(使用ViewModelProvider
)
像这样的东西:
class B : Fragment() {
//Seperate classes for ViewModelB & ViewModelFactoryB
private lateinit var viewModel: ViewModelB
private lateinit var viewModelFactory: ViewModelFactoryB
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding: BFragmentBinding = DataBindingUtil.inflate(
inflater,
R.layout.b_fragment,
container,
false
)
viewModelFactory = ViewModelFactoryB(BFragmentArgs.fromBundle(requireArguments()).data)
viewModel = ViewModelProvider(this, viewModelFactoryB).get(ViewModelB::class.java)
return binding.root
}
}