如何从片段中存在的警报对话框中检测 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....
我有这样一个 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....