首页 > 解决方案 > LiveData Observer onChnaged 在活动中被调用两次 | 安卓

问题描述

我在活动中使用实时日期观察者。当我启动活动时,第一次观察者 onChanged() 像往常一样只调用一次。但是当我按下并关闭活动然后再次启动活动观察者 onChanged() 调用两次。之后,每次我重复这些步骤时,它都会开始触发两次。

以下是活动代码:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       mLocLangQualViewModel = new ViewModelProvider(this).get(LocLangQualViewModel.class);
       mActivityLocLangQualSetupBinding = 
       DataBindingUtil.setContentView(this,R.layout.activity_loc_lang_qual_setup);
       mActivityLocLangQualSetupBinding.rvLanguages.setAdapter(mSelectedLanguageAdapter);
       mActivityLocLangQualSetupBinding.rvLanguages.setLayoutManager(new 
       LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));

    mLocLangQualViewModel.getAllLangsofUser().observe(this, new Observer<ArrayList<LanguageModel>>() 
    {
            @Override
            public void onChanged(ArrayList<LanguageModel> languageModels) {
                if (languageModels!=null){
                    Log.d("Observer","Called");
                   mSelectedLanguageAdapter = new SelectedLanguageAdapter(languageModels);
                   mActivityLocLangQualSetupBinding.rvLanguages.setAdapter(mSelectedLanguageAdapter);
                }

            }
        });

我确保 getAllLangsofUser() 函数被调用一次。所以只有 onchanged() 的观察者被调用了两次。

视图模型代码:

public class LocLangQualViewModel extends ViewModel {

private LocLangQualSetupRepo  mLocLangQualSetupRepo= LocLangQualSetupRepo.getInstance();
private MutableLiveData<ArrayList<LanguageModel>> langListLiveData;


public MutableLiveData<ArrayList<LanguageModel>> getAllLangsofUser(){
    Log.d("ViewModel","Method Called");
    if (langListLiveData==null){
        langListLiveData = mLocLangQualSetupRepo.getAllLangsOfUser();
    }
    return langListLiveData;
}

标签: androidmvvmandroid-livedata

解决方案


推荐阅读