在 fragment 没有出现之前,Dialog 是由 Activity 来管理的。
Activity 中有 onCreateDialog,showDialog 等几个方法,用于处理 dialog。
但现在这些方法都被抛弃了。
public static final int STYLE_NORMAL = 0; public static final int STYLE_NO_TITLE = 1; public static final int STYLE_NO_FRAME = 2;
public void show(FragmentManager manager, String tag) { mDismissed = false; mShownByMe = true; FragmentTransaction ft = manager.beginTransaction(); ft.add(this, tag); ft.commit(); }还有一个重载的 show 方法,提供将事务放入回退栈的机会,我对撤销事务不感冒。
void dismissInternal(boolean allowStateLoss) { if (mDismissed) { return; } mDismissed = true; mShownByMe = false; if (mDialog != null) { mDialog.dismiss(); mDialog = null; } mViewDestroyed = true; if (mBackStackId >= 0) { getFragmentManager().popBackStack(mBackStackId, FragmentManager.POP_BACK_STACK_INCLUSIVE); mBackStackId = -1; } else { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.remove(this); if (allowStateLoss) { ft.commitAllowingStateLoss(); } else { ft.commit(); } } }DF 的实现中,始终在执行一点,就是保证 Dialog 和 DF 的状态一致性。