android - 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;
}
解决方案
推荐阅读
- sql - DB2 SQLPL - 无法退出无限循环
- python - 错误:在 Python 3.8 (Windows) 上安装 Kivy 时命令出错,退出状态为 255
- python - 有没有办法从列表中获取一个元素并以变量的名称使用它?
- macos - 在 macOS 上启动 Minikube 时权限被拒绝
- r - 地图图例所需的 R 代码帮助不在正确的位置
- python - woocommerce rest api python 获取产品
- c# - 如何使用 nim-lang 中的 ImportDll 在 DotNet Core 中调用字符串函数
- node.js - 在节点 js 中使用正则表达式拆分字符串
- scikit-learn - Python scikit svm“未安装或提供词汇”
- python - 如何让 Selenium 在等待用户输入时运行