在 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
}}
你第二个Activity
的viewmodel
和第一个Activity
不一样;所有者(在本例中为活动)有 ViewModel
s 的缓存,并且这些所有者在每种情况下都不同。
ViewModel
s 可用于在同一 Activity
上的 Fragment
s 之间共享数据,但它们不适用于在活动之间共享数据。为此,传递 Intent
中的数据以启动第二个 Activity
(如果是轻量级的),否则将其存储在某个长期存在的对象中。
val intent = Intent(this,SecondActivity::class.java).apply {
putExtra("KEY", "<string to pass here>")
}
startActivity(intent)
我正在尝试使用 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
}}
你第二个Activity
的viewmodel
和第一个Activity
不一样;所有者(在本例中为活动)有 ViewModel
s 的缓存,并且这些所有者在每种情况下都不同。
ViewModel
s 可用于在同一 Activity
上的 Fragment
s 之间共享数据,但它们不适用于在活动之间共享数据。为此,传递 Intent
中的数据以启动第二个 Activity
(如果是轻量级的),否则将其存储在某个长期存在的对象中。
val intent = Intent(this,SecondActivity::class.java).apply {
putExtra("KEY", "<string to pass here>")
}
startActivity(intent)