首页 > 解决方案 > MainActivity中如何设置DialogFragment的onDismissListener?

问题描述

我写的类MyWindow扩展DialogFragment

public class MyWindow extends DialogFragment {
    public Button yes;
    public Button cancel;
    public Button no;
    public int result;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.save_layout, container);

        initButton(view);
        return view;
    }

    private void initButton(View view) {
        yes = view.findViewById(R.id.yes_button);
        cancel = view.findViewById(R.id.cancel_button);
        no = view.findViewById(R.id.no_button);

        yes.setOnClickListener(new View.OnClickListener() {//
            @Override
            public void onClick(View view) {
                result = 1;
                dismiss();
            }
        });

        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                result = 0;
                dismiss();
            }
        });

        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                result = -1;
                dismiss();
            }
        });
    }
}

我想创建一个MyWindow( mywindow) in的实例MainActivity,并执行 MainActivity 的函数以myWindow.result在它关闭后读取。我尝试直接调用mywindow.setOnDismissListenerMainActivity但程序无法编译。我试图添加

@Override
public void onDismiss(final DialogInterface dialog) {
    super.onDismiss(dialog);
    Activity activity = getActivity();
    if (activity instanceof DialogInterface.OnDismissListener) {
        ((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
    }
}

到 MyWindow,它仍然不起作用。

有没有办法在 MainActivity 中设置 DialogInterface 的 onDismissListener?

编辑:

MainActivity中,我myWindow

myWindow = new MyWindow();
myWindow.show(getSupportFragmentManager(), "confirm_dialog");

标签: androidandroid-fragmentsandroid-dialogfragmentandroid-dialog

解决方案


让你的 Activity 实现 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 DialogFragmentCustom 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);
        }
    }
}

试试这个。


推荐阅读