首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DialogFragment中的OnDismissListener

DialogFragment中的OnDismissListener
EN

Stack Overflow用户
提问于 2015-11-10 19:08:16
回答 3查看 3.2K关注 0票数 1

在我应用程序中,我有一个打开对话框片段的片段。在我的对话片段中,我接受了来自用户的一些设置,这些设置保存在一个静态类中,但我需要一个侦听器来通知我的片段对话框已关闭。

我使用了这个链接stackoverflow question的第一个答案中的代码,但这部分代码不起作用,因为我有一个片段,而不是一个活动。在dialogfragment中调用了onDismiss方法,但if语句失败,因此不会调用该片段。我尝试用getFragmentManager、getParentFragment和get/setTargetFragment替换这一部分,但不起作用。

有人能帮帮我吗?

代码语言:javascript
运行
复制
public void onDismiss(final DialogInterface dialog) {
    super.onDismiss(dialog);

    // code I've tried
    final FragmentManager fragment = getFragmentManager();
    if (fragment instanceof DialogInterface.OnDismissListener) {
        ((DialogInterface.OnDismissListener) fragment).onDismiss(dialog);
    }

    // original answer code  
    /*final Activity activity = getActivity();
    if (activity instanceof DialogInterface.OnDismissListener) {
        ((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
    }*/

}
EN

回答 3

Stack Overflow用户

发布于 2017-05-17 22:58:21

这是一个古老的问题,但我没有找到我满意的解决方案。我不喜欢将任何侦听器传递给我的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);
票数 3
EN

Stack Overflow用户

发布于 2015-11-10 19:35:46

您可以尝试接口回调,

在对话框片段中创建一个接口

代码语言:javascript
运行
复制
    public interface Listener{
     void onDismiss();
    }

在片段中实现这一点,

代码语言:javascript
运行
复制
public class MyFragment extends Fragment implements MyDialogFragment.Listener{

  @Override
public void onDismiss(){
  //write the operations here   
 }
}

现在,在对话框片段中接收父片段对象,例如:

代码语言:javascript
运行
复制
public void setListener(Listener listener){
 this.mListener = listener;
}

您必须从片段中调用此方法,以设置侦听器。

现在,在对话框片段的onDismiss()方法中,使用以下引用调用onDismiss

例如

代码语言:javascript
运行
复制
@Override
public void onDismiss(){
  mListener.onDismiss();
}

执行必要的null检查

也可以在下面的链接中查看

How to get button clicks in host fragment from dialog fragment

票数 1
EN

Stack Overflow用户

发布于 2015-11-10 19:27:39

我认为你可以用另一种方式来实现它:

代码语言:javascript
运行
复制
// create a function in YourFragment
public void myDissmiss();
// change your newInstance(bitmap) of your dialog fragment
public static DialogFragmentImage newInstance(Bitmap b,YourFragment f);

然后,您可以在您的public void onDismiss(final DialogInterface dialog) of DialogFragmentImage中调用yourfragment.myDissmiss()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33628603

复制
相关文章

相似问题

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