DialogFragment中的OnDismissListener

时间:2015-11-10 11:08:16

标签: android fragment listener dismiss

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

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

有人可以帮我吗?

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我认为你可以通过另一种方式存档它:

// create a function in YourFragment
public void myDissmiss();
// change your newInstance(bitmap) of your dialog fragment
public static DialogFragmentImage newInstance(Bitmap b,YourFragment f);

然后,您可以在yourfragment.myDissmiss()的{​​{1}}中致电public void onDismiss(final DialogInterface dialog)

答案 2 :(得分:0)

您可以尝试接口回叫,

在对话框片段中创建一个界面

public class MyFragment extends Fragment implements MyDialogFragment.Listener{

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

在你的片段中实现这个,

public void setListener(Listener listener){
 this.mListener = listener;
}

现在在你的对话框片段中收到你父片段的对象, 例如:

@Override
public void onDismiss(){
  mListener.onDismiss();
}

你必须从你的片段调用这个方法来设置监听器。

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

infoWindow

进行必要的空检查

检查以下链接

How to get button clicks in host fragment from dialog fragment