gpt4 book ai didi

android - 使用 MutableLiveData,将数据从 Activity 更新到 Fragment

转载 作者:行者123 更新时间:2023-12-04 12:24:33 25 4
gpt4 key购买 nike

我用过 SharedViewModel 将数据从 Activity 传递到 Fragment 的概念

就像在 Activity 中有 编辑文本 ,基于我在 EditText 中写的任何内容,回收站查看 fragment 应该显示过滤的数据。

查看型号:

fun onSearchChanged(s: CharSequence, start: Int, before: Int, count: Int) {
mutableChangedText.postValue(s.toString())
}

fun getSearchChangedText(): MutableLiveData<String> {
return mutableChangedText
}

fragment :我正在使用以下方法观察 Fragment 中的数据,但这里没有观察到
private lateinit var sharedVM: SharedViewModel

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

fragmentBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_list_passwords, container, false)
sharedVM = ViewModelProvider(this).get(SharedViewModel::class.java)
fragmentBinding.appListViewModel = sharedVM
observeSearchText()
return fragmentListPasswordBinding.root
}
private fun observeSearchText() {
sharedVM.getSearchChangedText().observe(viewLifecycleOwner, Observer {
Log.d(TAG, "value = $it")
})
}

主要 Activity :如果我在 EditText 所在的 Activity 类中使​​用相同的代码,它工作正常。
私有(private)lateinit var sharedVM:SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
sharedVM = ViewModelProvider(this).get(SharedViewModel::class.java)
activityMainBinding.appListViewModel = sharedVM

observeSearchText()
}

private fun observeSearchText() {
sharedVM.getSearchChangedText().observe(this, Observer {
Log.d(TAG,"value = $it")
})
}

根据@Hein Htet Aung 的回答,如果我将其更改为 Activity ,我将低于编译时错误

enter image description here

答:

感谢 Hein Htet Aung

我在 fragment 中使用以下代码得到了解决方案
sharedVM = ViewModelProvider(activity as MainActivity).get(SharedViewModel::class.java)

最佳答案

内部 fragment ,转换这一行

sharedVM = ViewModelProvider(this).get(SharedViewModel::class.java)


sharedVM = ViewModelProvider(activity).get(SharedViewModel::class.java)

通过使用 activity , viewmodelprovider 将从 Activity 中提供相同的 View 模型

关于android - 使用 MutableLiveData,将数据从 Activity 更新到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com