首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DialogFragment和onDismiss

DialogFragment和onDismiss
EN

Stack Overflow用户
提问于 2014-05-21 22:22:38
回答 9查看 67K关注 0票数 71

我使用的是一个DialogFragment,我在Activity中显示如下所示

代码语言:javascript
复制
DialogFragmentImage dialog = DialogFragmentImage.newInstance(createBitmap());
dialog.onDismiss(dialog);.onDismiss(this);          
dialog.show(getFragmentManager(), "DialogFragmentImage");

我想在我的Activity中检查DialogFragment何时关闭(例如,当按下back按钮时)。我该怎么做呢?我怎样才能“告诉”我的activity DialogFragment已经被关闭了?

EN

回答 9

Stack Overflow用户

发布于 2014-05-21 22:27:09

让你的活动实现OnDismissListener

代码语言:javascript
复制
public final class YourActivity extends Activity implements DialogInterface.OnDismissListener {

    @Override
    public void onDismiss(final DialogInterface dialog) {
        //Fragment dialog had been dismissed
    }

}

DialogFragment已经实现了OnDismissListener,只需覆盖该方法并调用Activity即可。

代码语言:javascript
复制
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对话:

代码语言:javascript
复制
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);
        } 
    }

}
票数 111
EN

Stack Overflow用户

发布于 2017-01-26 18:33:40

这是我的答案。有点晚了,但可能对路过的人有好处。

代码语言:javascript
复制
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
                    }
                });

我们需要打电话给

代码语言:javascript
复制
fm.executePendingTransactions(); 

以确保已经执行了FragmentTransaction工作。否则,在调用setOnDismissListener()时可能会发生NullPointerException

如果有什么差错,很抱歉。希望这能有所帮助。

票数 38
EN

Stack Overflow用户

发布于 2017-05-17 23:00:33

这是一个古老的问题,但我没有找到我满意的解决方案。我不喜欢将任何侦听器传递给我的DialogFragment或设置一个TargetFragment,因为这可能会在方向更改时中断。你觉得这个怎么样?

代码语言:javascript
复制
        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);
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23786033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档