调用一次后删除观察者

问题描述 投票:0回答:1

我有一个名为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;
}
android android-livedata
1个回答
0
投票

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

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

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

overrideViewModel.getBaseResp().removeObserver(observer);

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

overrideViewModel.getBaseResp().getValue()
© www.soinside.com 2019 - 2024. All rights reserved.