我在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
想法背道而驰。特别要记住,a销毁后会ViewModel
被清除LifecycleOwner
,因此您可能会遇到共享ViewModel
对象被清除而又不想清除它们的问题。
我个人不会使用这种方法。
是否存在另一种推荐方法?
这是三个:
有一个活动和两个片段,ViewModel
片段之间共享。ViewModel
在片段之间共享a只是使用ViewModelProviders.of(requireActivity())
而不是的问题ViewModelProviders.of(this)
。或者,如果您使用的是“导航”组件,则可以ViewModel
对特定的导航图使用作用域。
通过Intent
附加功能在活动之间传递数据。
让公共数据由存储库管理,通过Intent
附加功能在活动之间传递标识符以在存储库中查找该数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句