错误描述
- 启动一个Activity做一些操作,然后回调之前的Activity的方法弹出DialogFragment,DialogFragment无法弹出。
- Activity失去焦点onPause之后调用DialogFragment的show方法无法弹出。
错误分析
- 因为回调的时候获取SupportFragmentManager的context或者Activity还没有onResume导致弹出失败,需要做延时处理,处理如下
解决方法
- DialogFragment实现LifeCycleObserver接口
- 重写DialogFragment的show方法,记录FragmentManager和Tag
@Override
public void show(FragmentManager manager, String tag) {
this.fragmentManager = manager;
this.tag = tag;
if (!checkActivityIsActive(manager)) {
return;
}
super.show(manager, tag);
}
/**
* 检查当前页面是否处于活跃状态
*
* @param manager 当前Activity对应的fragment管理者
* @return
*/
protected boolean checkActivityIsActive(FragmentManager manager) {
if (manager.isStateSaved()) {
needShow = true;
return false;
}
needShow = false;
return true;
}
- 监听Activity的onResume
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onActivityResume() {
if (needShow) {
show(fragmentManager, tag);
needShow = false;
}
}
- 添加生命周期监听
((FragmentActivity) context).getLifecycle().addObserver(dialogFragment);
总结
通过以上两个步骤大多数的错误都可以解决了,还没有解决的话可以留言一起看看,别忘了