调用一次后删除观察者

时间:2020-03-05 07:48:20

标签: android android-livedata

我有一个名为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;
}

1 个答案:

答案 0 :(得分:0)

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

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

然后在需要停止观察时将该实例传递给removeObsever()

overrideViewModel.getBaseResp().removeObserver(observer);

如果只希望在特定时间点由LiveData发出当前值,请考虑不使用观察者,而直接通过getValue()访问该值:

overrideViewModel.getBaseResp().getValue()