如何从片段中存在的警报对话框中检测 Activity 中的按钮单击?

How to detect the button click in Activity from the Alert Dialog present in a Fragment?

我有这样一个 DialogFragment,

public class Dfragment extends DialogFragment {

    public Dfragment() {
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());
        ab.setMessage("Delete Everything").setTitle("DELETE DB")
                .setPositiveButton("OK",new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })

                .setNegativeButton("CANCEL",new DialogInterface.OnClickListener()

                { @Override
                    public void onClick(DialogInterface dialog, int which) {         }
                });


        return ab.create();
    }

}

我可以从片段中检测到 positive/negative,但是如何从调用它的地方的 Activity 中检测到它。

这里是Activity,

中实现的代码
 Dfragment frag = new Dfragment();
        frag.show(getFragmentManager(),"THISDIALOG");

那么在 Activity 我如何确定哪个按钮被点击了?

到目前为止我尝试过的东西,

从上面的Fragment代码中,

setPositiveButton("OK",null) 替换了上面的代码,但还是没用。

我需要修改哪些代码才能使其按预期工作?

编辑 1:

我知道它可以通过接口实现,但我想不用它。

你不需要从activity检测它。 只需在该侦听器中编写您的代码,并按照您调用的方式进行调用。例如..

  @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());
    ab.setMessage("Delete Everything").setTitle("DELETE DB")
            .setPositiveButton("OK",new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                   Log.d("log", "this will log anyway");
                }
            })

            .setNegativeButton("CANCEL",new DialogInterface.OnClickListener()

            { @Override
                public void onClick(DialogInterface dialog, int which) {         }
            });


    return ab.create();
}

除此之外,如果您想做任何其他事情,您需要实施 callback

祝你好运

我有一个建议给你。你可以这样做:

public abstract class Dfragment extends DialogFragment {

    public Dfragment() {
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());
        ab.setMessage("Delete Everything").setTitle("DELETE DB")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        onPositiveButtonClick();
                    }
                })

                .setNegativeButton("CANCEL", new DialogInterface.OnClickListener()

                {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        onNegativeButtonClick();
                    }

                });


        return ab.create();
    }

    public abstract void onPositiveButtonClick();

    public abstract void onNegativeButtonClick();

}

并创建对象

Dfragment frag = new Dfragment() {
    @Override
    public void onPositiveButtonClick() {

    }

    @Override
    public void onNegativeButtonClick() {

    }
};
frag.show(getFragmentManager(),"THISDIALOG");

为此使用接口,

public class Dfragment extends DialogFragment {

Clicks objclick;

public Dfragment() {
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());
    ab.setMessage("Delete Everything").setTitle("DELETE DB")
            .setPositiveButton("OK",new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                     obj.onclick();
                }
            })

            .setNegativeButton("CANCEL",new DialogInterface.OnClickListener()

            { @Override
                public void onClick(DialogInterface dialog, int which) {         }
            });


    return ab.create();
}

public void clicklistner(Clicks click){
    objclick=click;
}


  }

制作界面,

public interface Clicks{
    public void onclick();
}

从您的 activity、

调用 clicklistner 方法
frag.clicklistner(new....