android - 调用一次后删除观察者
问题描述
我有一个名为 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;
}
解决方案
您应该记住您传递给的观察者的确切实例observe
:
final Observer<BaseResponseModel> observer = Observer<BaseResponseModel>() { ... }
overrideViewModel.getBaseResp().observer(requireActivity(), observer);
然后将该实例传递removeObsever()
给停止观察的时间:
overrideViewModel.getBaseResp().removeObserver(observer);
如果您只想要 LiveData 在特定时间点发出的当前值,请考虑不使用观察者而直接使用getValue()访问该值:
overrideViewModel.getBaseResp().getValue()
推荐阅读
- spring-data-jpa - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链接失败 & 数据库消失 & sql cmd line auto close
- python-3.x - 像素跟踪无法正常工作
- python-3.x - 使用 sklearn 在 python 中进行标签和 Onehottencodeing
- php - 单击单选按钮的标签时下拉菜单消失
- c# - 将数据从自定义渲染器传递到自定义控件
- angular - Ionic Mobile 应用程序导航到外部 url
- ios - 快速禁用表格视图单元格中的滑动操作
- pandas - 如何合并熊猫中的重复行?
- php - Laravel 上不稳定的附加功能
- python - 条件列创建 DF Pandas