在 ViewModel 中使用 LiveData 将对象传递给其他 activity

Using LiveData in ViewModel to pass object to other activity

我正在尝试使用 ViewModel 中的 MutableLiveData 将数据从 MainActivity 传递到 SecondActivity,当 SecondActivity 尝试访问实时数据

视图模型:

class MyViewModel: ViewModel() {
val current=MutableLiveData<String>()
}

主要Activity:

class MainActivity : AppCompatActivity() {
private val viewModel: MyViewModel by lazy {
        ViewModelProviders.of(this).get(MyViewModel::class.java)
    }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    textView.text="test"
    viewModel.current.value="test"
    textView.setOnClickListener {
        startActivity(Intent(this,SecondActivity::class.java))
    }
}}

第二Activity:

class SecondActivity: AppCompatActivity() {
private val viewModel: MyViewModel by lazy {
    ViewModelProviders.of(this).get(MyViewModel::class.java)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_second)
    textView2.text = viewModel.current.value!! // NullPointerException
}}

你第二个Activityviewmodel和第一个Activity不一样;所有者(在本例中为活动)有 ViewModels 的缓存,并且这些所有者在每种情况下都不同。

ViewModels 可用于在同一 Activity 上的 Fragments 之间共享数据,但它们不适用于在活动之间共享数据。为此,传递 Intent 中的数据以启动第二个 Activity(如果是轻量级的),否则将其存储在某个长期存在的对象中。

val intent = Intent(this,SecondActivity::class.java).apply {
    putExtra("KEY", "<string to pass here>")
}
startActivity(intent)