android - 片段不通过 sharedViewModel 和 LiveData 进行通信
问题描述
我希望第一个片段通过来自第二个片段的 LiveData 观察信息。我尝试做同样的事情,但只在 1 个 Fragment 中工作,但只要我想接收其他片段中的数据,它就会停止工作(textView 没有文本)。我应该如何解决这个问题?
共享视图模型:
class SharedViewModel : ViewModel() {
private val selected : MutableLiveData<Person> = MutableLiveData<Person>()
fun select(person: Person){
selected.value = person
}
fun getSelected(): LiveData<Person>{
return selected
}
}
第一个片段:
class FirstFragment : Fragment() {
private lateinit var sharedViewModel: SharedViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
sharedViewModel =
ViewModelProviders.of(this).get(SharedViewModel::class.java)
val root = inflater.inflate(R.layout.fragment_home, container, false)
val textView: TextView = root.findViewById(R.id.text_home)
sharedViewModel.getSelected().observe(viewLifecycleOwner, Observer{
textView.text = it.name
})
return root
}
}
第二个片段:
class SecondFragment : Fragment() {
private lateinit var sharedViewModel: SharedViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
sharedViewModel =
ViewModelProviders.of(this).get(SharedViewModel::class.java)
val root = inflater.inflate(R.layout.fragment_dashboard, container, false)
val textView: TextView = root.findViewById(R.id.text_dashboard)
val person = Person("John")
val newPerson = Person("Anton")
val button2: Button = root.findViewById(R.id.button2)
val button: Button = root.findViewById(R.id.button)
button2.setOnClickListener {
sharedViewModel.select(person)
}
button.setOnClickListener {
sharedViewModel.select(newPerson)
}
return root
}
}
班级人:
class Person (var name: String) {
}
解决方案
推荐阅读
- ios13 - 在 ios 13 上未显示自动填充的手机号码
- php - Magento2 自定义布局无法访问产品的自定义模块 phtml 文件
- javascript - 使用javascript转义字符串中的特定字符
- php - 我在 OpenEMR 中的第一个 Symfony 2.4 组件控制器
- sapui5 - 在 SapUI5 或 OpenUI5 simple.GanttChartContainer 中,如何正确选择形状突出显示?
- vscode-extensions - 如何从 vscode 语言服务器对文本文档进行编辑?
- android - 如何在Android中拖动和删除ARCore节点?
- javascript - 如何从 Html/JS 中的工具提示复制文本
- docker - 当我可以将 HTTP 请求发送到 Mac 上相同的服务器设置时,为什么我不能将 HTTP 请求发送到在 Windows 上的 docker 映像中运行的 Django 服务器?
- javascript - 在 Javascript 中比较两个对象数组与文字值的更快方法