我可以在配套对象中共享视图模型吗?



我在Android上使用MVVM有问题。我想在两个活动之间共享数据。在其中一个中,我创建了ViewModel(MainActivity),接下来在一个配套对象中将ViewModel共享给另一个活动(SecondActivity)。安全吗?存在另一种推荐的方式吗?

感谢您的任何帮助和解释

class SecondActivity : AppCompatActivity() {    
lateinit var viewModelTwo: ViewModelForActivities
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
}

override fun onStart() {
super.onStart()
viewModelTwo = MainActivity.viewModel
textViewTwo.setText(viewModelTwo.licznik.toString())
}
}
class MainActivity : AppCompatActivity() {
companion object{
lateinit var viewModel: ViewModelForActivities
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this).get(ViewModelForActivities::class.java)
textViewOne.setOnClickListener {
val intent = Intent(applicationContext, SecondActivity::class.java)
viewModel.licznik++
startActivity(intent)
}
}
}    

该应用程序工作正常,但我担心安全。这是正确的方法吗?

安全吗?

我相当有信心它违背了ViewModel开发人员的想法。特别是,请记住,当ViewModelLifecycleOwner被销毁时,就会被清除,因此您可能会遇到共享ViewModel对象被清除的问题,而您不希望它们被清除。

就个人而言,我不会使用这种方法。

存在另一种推荐的方式吗?

这里有三个:

  • 有一个活动和两个片段,片段之间共享ViewModel。在片段之间共享ViewModel只是使用ViewModelProviders.of(requireActivity())而不是ViewModelProviders.of(this)的问题。或者,如果使用导航组件,则可以使用范围限定为特定导航图的ViewModel

  • 通过Intent附加功能在活动之间传递数据。

  • 让公共数据由存储库管理,通过Intent附加功能在活动之间传递标识符,以在存储库中查找该数据。

相关内容

  • 没有找到相关文章

最新更新