我对 Android 上的 MVVM 有疑问。我想在两个 Activity 之间共享数据。在其中一个中,我创建了 ViewModel (MainActivity),然后在伴随对象中将 ViewModel 共享给另一个 Activity (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)
}
}
}
该应用程序工作正常,但我担心安全。这是正确的方法吗?
最佳答案
Is it safe?
我相当有信心它违背了
ViewModel
的开发者的想法。记住。特别要记住 ViewModel
当其 LifecycleOwner
时被清除已销毁,因此您可能会遇到共享 ViewModel
的问题当您不希望它们被清除时,对象会被清除。就个人而言,我不会使用这种方法。
Is exists another recommended way?
这里有三个:
ViewModel
fragment 之间。分享一个ViewModel
fragment 之间只是使用 ViewModelProviders.of(requireActivity())
的问题而不是 ViewModelProviders.of(this)
.或者,如果您使用导航组件,您可以使用 ViewModel
范围为特定的导航图。 Intent
在 Activity 之间传递数据额外的。 Intent
在 Activity 之间传递标识符在存储库中查找该数据的附加功能。 关于android - 我可以在伴生对象中共享 ViewModel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063221/