背景:在app的fragment不可见的情况下使用,发现注册了,但是没有回调导致数据一直未更新,只有在fragment可见的时候才收到回调
// 观察通用信息
mLightNaviTopViewModel.getUpdateCommonInfo().observe(this, new Observer<CommonInfoModel>() {
@Override
public void onChanged(CommonInfoModel model) {
if (model != null) {
AppLog.e(TAG, "通用数据刷新");
lightNavGuideView.updateTurnIcon(model.getTurnIcon());
lightNavGuideView.updateDistance(model.getDistance());
CodriverMapViewStatusListener.getInstance().setLightNaviTBTInfoModel(model);
}
}
});
思路:后来问chatgpt说我在framget的onCreateView方法中注册才行,于是尝试发现不行还导致崩溃
后面尝试其他方案都没有完美的结局办法,
后来同时说你为什么不用observeForever的方式进行监听,这样就算不可见也能一直收到回调。
于是尝试发现真的解决了!!!
//注册监听
mLightNaviTopViewModel.getUpdateCommonInfo().observeForever(mCommonInfoModelObserver);
//具体监听类
private Observer<CommonInfoModel> mCommonInfoModelObserver = new Observer<CommonInfoModel>() {
@Override
public void onChanged(CommonInfoModel model) {
if (model != null) {
AppLog.e(TAG, "通用数据刷新");
if (lightNavGuideView != null) {
lightNavGuideView.updateTurnIcon(model.getTurnIcon());
lightNavGuideView.updateDistance(model.getDistance());
}
CodriverMapViewStatusListener.getInstance().setLightNaviTBTInfoModel(model);
}
}
};
//最后在fragment销毁的时候调用remove方法即可
protected void removeModelObersve() {
mLightNaviTopViewModel.getUpdateCommonInfo().removeObserver(mCommonInfoModelObserver);
}