Android 如何从片段中的警报对话框中检测按钮点击活动?

Android 如何从片段中的警报对话框中检测按钮点击活动?,android,android-dialogfragment,Android,Android Dialogfragment,我有一个像这样的片段 public class Dfragment extends DialogFragment { public Dfragment() { } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());

我有一个像这样的片段

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();
    }

}
我可以从片段中检测阳性/阴性,但是如何从调用它的活动中检测阳性/阴性

以下是活动中实现的代码

 Dfragment frag = new Dfragment();
        frag.show(getFragmentManager(),"THISDIALOG");
那么在活动中,我如何确定单击了哪个按钮

到目前为止我试过的东西

根据上面的片段代码

setPositiveButton(“OK”,null)在上述代码中被替换,但仍然不起作用

我需要修改什么代码才能使其按预期工作

编辑1


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

您不需要从活动中检测它。 只需编写侦听器中的任何代码,并以与调用相同的方式调用即可。例如

  @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();
}
除此之外,如果您想做任何事情,而不是需要实现
回调


祝你好运

你不需要从活动中检测到它。 只需编写侦听器中的任何代码,并以与调用相同的方式调用即可。例如

  @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();
}
除此之外,如果您想做任何事情,而不是需要实现
回调


祝你好运,我有一个建议给你。你可以这样做:

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 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();
}
从活动中调用clicklistner方法

frag.clicklistner(new....

使用此接口

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();
}
从活动中调用clicklistner方法

frag.clicklistner(new....

像往常一样1。获得活动,2。转换到接口3。从界面调用该方法并传递单击的按钮…可能是@Selvin编辑的我的问题的重复项。与往常一样1。获得活动,2。转换到接口3。从界面调用该方法并传递单击的按钮…可能是@Selvin编辑了我的问题。伙计,我不知道。我的问题是如何从主要活动中发现它?老兄,我不知道吗。我的问题是如何从主要活动中检测它?请仔细阅读我的问题。我不想使用界面。请仔细阅读我的问题。我不想使用接口。