gpt4 book ai didi

Android ViewModel 观察 Mu​​tableLiveData>

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

我在 fragment 中有一个tablayout。选项卡布局有 3 个选项卡。哪个选项卡有 fragment 。而且,在第一个 fragment 中,我插入一个字符串并将其添加到 viewModel MutableLiveData<ArrayList>>多变的。然后,我要在第三个 fragment 中观察。我的主要 ViewModel:

class MainViewModel : ViewModel() {
val message = MutableLiveData<ArrayList<String>>(arrayListOf())

fun myMessage(msg: String) {
message.value?.add(msg)
}
}

第三个 fragment :

class Fragment3 : Fragment() {

lateinit var model: MainViewModel

private lateinit var viewModel: MainViewModel

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view= inflater.inflate(R.layout.fragment3_fragment, container, false)

model = activity?.let { ViewModelProvider(it).get(MainViewModel::class.java) }!!

model.message.observe(viewLifecycleOwner, Observer {
Log.e("aqui", "aqui$it")
})
return view
}
}

我的第一个 fragment :

class Fragment1 : Fragment() {

lateinit var model: MainViewModel


private lateinit var viewModel: MainViewModel

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view= inflater.inflate(R.layout.fragment1_fragment, container, false)
model = activity?.let { ViewModelProvider(it).get(MainViewModel::class.java) }!!
var btnTest= view.findViewById<Button>(R.id.btn_test)
btnTest.setOnClickListener {
model.myMessage(et_text.text.toString())
}

return view
}
}

当我打开第三个 fragment 时,它会按计划进行观察。当我回到第一个 fragment 并向数组列表中添加更多字符串时,第三个 fragment 不再观察到,我不知道为什么。

第一个观察者:

enter image description here

我的布局:

enter image description here

我的观察者只观察一次。

最佳答案

您必须更改实时数据的值,而不仅仅是将项目添加到已设置的列表中。

将函数 myMessage 更改为:

fun myMessage(msg: String) {
val list = message.value
list.add(msg)
message.value = list
}

这将获取您现有的列表,然后添加您的新项目,然后设置实时数据的值以便调用观察。

关于Android ViewModel 观察 Mu​​tableLiveData<ArrayList<String>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61909608/

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