我使用的是一个DialogFragment,我在Activity中显示如下所示
DialogFragmentImage dialog = DialogFragmentImage.newInstance(createBitmap());
dialog.onDismiss(dialog);.onDismiss(this);
dialog.show(getFragmentManager(), "DialogFragmentImage");我想在我的Activity中检查DialogFragment何时关闭(例如,当按下back按钮时)。我该怎么做呢?我怎样才能“告诉”我的activity DialogFragment已经被关闭了?
发布于 2014-05-21 22:27:09
让你的活动实现OnDismissListener
public final class YourActivity extends Activity implements DialogInterface.OnDismissListener {
@Override
public void onDismiss(final DialogInterface dialog) {
//Fragment dialog had been dismissed
}
}DialogFragment已经实现了OnDismissListener,只需覆盖该方法并调用Activity即可。
public final class DialogFragmentImage extends DialogFragment {
///blah blah
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
}如果使用childFragment管理器(API>=17)从片段启动对话框,则可以使用getParentFragment与父片段上的onDismissListener对话:
public final class DialogFragmentImage extends DialogFragment {
///blah blah
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
Fragment parentFragment = getParentFragment();
if (parentFragment instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) parentFragment).onDismiss(dialog);
}
}
}发布于 2017-01-26 18:33:40
这是我的答案。有点晚了,但可能对路过的人有好处。
FragmentManager fm = getFragmentManager();
YourDialogFragment dialog = new YourDialogFragment();
dialog.show(fm,"MyDialog");
fm.executePendingTransactions();
dialog.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
//do whatever you want when dialog is dismissed
}
});我们需要打电话给
fm.executePendingTransactions(); 以确保已经执行了FragmentTransaction工作。否则,在调用setOnDismissListener()时可能会发生NullPointerException。
如果有什么差错,很抱歉。希望这能有所帮助。
发布于 2017-05-17 23:00:33
这是一个古老的问题,但我没有找到我满意的解决方案。我不喜欢将任何侦听器传递给我的DialogFragment或设置一个TargetFragment,因为这可能会在方向更改时中断。你觉得这个怎么样?
MyDialog d = new MyDialog();
d.show(fragmentManager, "tag");
fragmentManager.registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
super.onFragmentViewDestroyed(fm, f);
//do sth
fragmentManager.unregisterFragmentLifecycleCallbacks(this);
}
}, false);https://stackoverflow.com/questions/23786033
复制相似问题