【问题标题】:Android ViewModel Observe MutableLiveData<ArrayList<String>>Android ViewModel 观察 Mu​​tableLiveData<ArrayList<String>>
【发布时间】:2020-05-20 09:27:48
【问题描述】:

我在片段中有一个 tablayout。选项卡布局有 3 个选项卡。哪个选项卡有一个片段。 而且,在第一个片段中,我插入一个字符串并将其添加到 viewModel MutableLiveData&lt;ArrayList&gt;&gt; 变量中。 然后,我想在第三个片段中观察。 我的主要视图模型:

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

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

第三个片段:

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
}
}

我的第一个片段:

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 并在数组列表中添加更多 Strings 时,第三个没有再次观察到,我不知道为什么。

第一观察者:

我的布局:

我的观察者只观察一次。

【问题讨论】:

    标签: android observable viewmodel android-livedata mutablelivedata


    【解决方案1】:

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

    把你的函数myMessage改成:

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多