【问题标题】:View Model variable in being observed more than once查看模型变量被多次观察
【发布时间】:2020-10-07 09:00:28
【问题描述】:

我遇到了一个特殊的问题。在我的代码中,我在视图模型中观察到String 类型的MutableLiveData,并将上下文显示为吐司。当我在 AVD 中运行它时,toast 被多次显示,即MutableLiveData 被多次观察。但是,当我在我的手机中运行相同的代码时,toast 只显示一次(按预期工作)。

代码(片段):

if(!viewModel.messageDisplayed) {
                viewModel.MessageStatus.observe(viewLifecycleOwner, Observer {
                    it.toast(context)
                    viewModel.messageDisplayed = true // I'm using this variable to avoid displaying the toast multiple 
                                                     //times but it does not work in the emulator 
                })
            }

代码(视图模型):

val MessageStatus = MutableLiveData<String>()

fun fireStoreOperations(){
    //fireStore Operations
        .addOnSuccessListener{
         messageDisplayed= False
         MessageStatus.value = "Message to be displayed"
        }
}

【问题讨论】:

    标签: android android-fragments mvvm viewmodel android-toast


    【解决方案1】:

    您可以将观察者放在片段的onActivityCreated 中。所以它看起来像

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
        viewModel.MessageStatus.observe(viewLifecycleOwner, Observer {
                    it.toast(context)
                    viewModel.messageDisplayed = true 
                })
    }
    

    【讨论】:

      【解决方案2】:

      你必须检查你是否调用了这个方法一次。 如果不应该多次调用 LiveData 的观察者。 更多细节 this can help

      【讨论】:

        猜你喜欢
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        • 2012-05-23
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        相关资源
        最近更新 更多