android - 我可以在伴生对象中共享 ViewModel 吗?

标签 android kotlin mvvm viewmodel

我对 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?



这里有三个:
  • 有一个 Activity 和两个 fragment ,共享 ViewModel fragment 之间。分享一个ViewModel fragment 之间只是使用 ViewModelProviders.of(requireActivity()) 的问题而不是 ViewModelProviders.of(this) .或者,如果您使用导航组件,您可以使用 ViewModel范围为特定的导航图。
  • 通过 Intent 在 Activity 之间传递数据额外的。
  • 让公共(public)数据由存储库管理,通过 Intent 在 Activity 之间传递标识符在存储库中查找该数据的附加功能。
  • 关于android - 我可以在伴生对象中共享 ViewModel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063221/

    相关文章:

    android - imageview 未设置全屏

    android - 配置其他库使用的 OkHttpClient 实例

    android - Kotlin 协程 : why is this not throwing a NetworkOnMainThreadException?

    oop - 了解 Kotlin 中的特征

    c# - MVVM – UWP 的层次结构和导航隐式绑定(bind)

    wpf - TreeView 元素的上下文菜单的 MVVM 命令绑定(bind)

    android - 每个带有 ActionBarSherlock 的选项卡 fragment 的操作栏菜单

    android - 在 Android 中完成操作后返回 Activity?

    kotlin - 为什么Kotlin中的groupBy通用形式还不够?

    c# - 如何将 xml 绑定(bind)到 wpf TreeView ?