可通过两种方式 解除DialogFragment,
1. 对话框碎片对象调用dismiss(), 此方法将从FragmentManager 删除碎片, 然后提交该事务 . 如果此DialogFrament 有一个后退栈, 方法将从事务栈中弹出当前对话框, 并显示上一个碎片事务状态。 dismiss() 方法 会调用标准DialogFragment 销毁回调方法, onDismiss(). 但是,不能依靠onDismiss() 得出已调用dismiss() 的结论。因为设备配置更改时也会调用 onDismiss().
如果在显示对话框碎片时按下后退按钮,将导致在对话框碎片上触发onCancle() 方法,对话框碎片退出,所以无需自行调用dismiss(). 但是, 如果希望通知Activity 对话框已取消,需要调用onCancle() 内的逻辑来实现,这是onCancle() 与 onDismiss() 之间的区别。使用onDismiss() , 仍然无法确定发生的何种操作触发了onDismiss()方法。 DialogFragment对象没有cancle(), 只有dismiss()
2. 提供另一个DialogFragment, 也就是说用一个新的 对话框碎片替换 原来的对话框碎片.
看一段示例代码:
if(view.getId() == R.id.btn_another_dialog) {
Activity act = getActivity();
FragmentTransaction ft = act.getFragmentManager().beginTransaction();
ft.remove(this);
ft.addToBackStack(null); //增加回退栈一个空值
HelpDialogFragment newDialogFragment = HelpDialogFragment.newInstance(R.string.help);
newDialogFragment.shwo(ft, "help");
}
在单个事务中, 我们先删除了当前的DialogFragment , 接着添加了新的 DialogFragment. 这样就产生了原来对话框 几乎消失 而新的对话框出现的效果。 如果用户按下后退按钮, 由于在后退栈上保存了此事务,所以新对话框将消失,上一个对话框将显示.
上一篇,对show()作了介绍, 现在可以了解到: show() 方法自动将碎片添加到FragmentManager , dismiss() 方法自动从FragmentManager 删除碎片. 碎片只能向FragmentManager 碎片管理器添加一次.