首页 > 解决方案 > 调用一次后删除观察者

问题描述

我有一个名为 overrideObserver 的观察者,我想在显示吐司后将其删除(目前,每当我回忆起吐司总是出现的片段时)。尝试使用 removeObserver 方法,但它不起作用。希望你们中的任何人都可以提供帮助。谢谢你。

    private void overrideObserver() {
    overrideViewModel.getBaseResp().observe(requireActivity(), new Observer<BaseResponseModel>() {
        @Override
        public void onChanged(BaseResponseModel baseResponseModel) {
            Toast.makeText(context, baseResponseModel.getErrorMessage(), Toast.LENGTH_SHORT).show();
            overrideViewModel.getBaseResp().removeObservers(requireActivity());
        }
    });

}

这就是 getBaseResp 所做的

    public LiveData<BaseResponseModel> getBaseResp() {
    if(baseResp == null) {
        baseResp = new MutableLiveData<>();
    }
    return baseResp;
}

标签: androidandroid-livedata

解决方案


您应该记住您传递给的观察者的确切实例observe

final Observer<BaseResponseModel> observer = Observer<BaseResponseModel>() { ... }
overrideViewModel.getBaseResp().observer(requireActivity(), observer);

然后将该实例传递removeObsever()给停止观察的时间:

overrideViewModel.getBaseResp().removeObserver(observer);

如果您只想要 LiveData 在特定时间点发出的当前值,请考虑不使用观察者而直接使用getValue()访问该值:

overrideViewModel.getBaseResp().getValue()

推荐阅读