我正在尝试创建一个用于显示Yes / No AlertDialog的自定义类,但我希望onClick处理程序位于实例化自定义类的活动中。到目前为止,自定义类看起来像这样:
public class YesNoDialog {
private Context gContext = null;
private DialogInterface.OnClickListener onClickListener;
private AlertDialog alertDialog = null;
public YesNoDialog(Context context,
DialogInterface.OnClickListener listener) {
this.gContext = context;
this.onClickListener = listener;
}
public void ShowDialog() {
AlertDialog.Builder alertDialogBuilder = new
AlertDialog.Builder(this.gContext);
alertDialogBuilder.setTitle("Hello World");
alertDialogBuilder
.setMessage("Are you sure?")
.setCancelable(false)
.setPositiveButton("Yes",this.onClickListener)
.setNegativeButton("No",this.onClickListener);
alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
我的想法是将上下文和onClick处理程序传递给构造函数中的对象,然后将处理程序分配给.setPositive和.setNegative按钮。
我在MainActivity类中实现了DialogInterface.OnClickListener:
public class MainActivity
extends AppCompatActivity
implements DialogInterface.OnClickListener {
并在MainActivity中创建了onClick处理程序,当在对话框中单击“是”或“否”按钮时,应该调用该处理程序。
@Override
public void onClick(DialogInterface dialog, int id) {
Log.d("DIALOG RETURNS ID=", Integer.toString(id));
dialog.dismiss();
}
我不确定我是否在正确的轨道上,但是我一直试图找出如何将onClick处理程序传递给YesNoDialog对象。我尝试了几种变体:
YesNoDialog dialog = new YesNoDialog(this, MainActivity.onClick);
没有成功(不会被编译)。我也尝试过只传递上下文,假设可能是我真正需要的.setPositive和.setNegative按钮处理程序,但这也不起作用......这个调用需要一个DialogInterface.OnClickListener。
感觉我已经接近了,但我无法克服障碍。任何人都可以帮我连接点吗?
答案 0 :(得分:5)
创建一个类(DialogUtils)并在其中添加此方法。
public static void showPopUp(Context context
, String title
, String msg
, String positiveBtnTxt
, String negativeBtnTxt
, DialogInterface.OnClickListener positiveBtnListener
, DialogInterface.OnClickListener negativeBtnListener){
final AlertDialog errorDialog;
AlertDialog.Builder errorDialogBuilder = new AlertDialog.Builder(context, R.style.NativeDialogue);
errorDialogBuilder.setTitle(title);
errorDialogBuilder.setMessage(msg);
errorDialogBuilder.setPositiveButton(positiveBtnTxt, positiveBtnListener);
errorDialogBuilder.setNegativeButton(negativeBtnTxt, negativeBtnListener);
errorDialog = errorDialogBuilder.create();
errorDialog.show();
}
调用这样的方法:
DialogUtils.showPopUp(this, "title", "message", "positive btn name", "Negative Btn name", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
"Your action"
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
"Your action"
}
});
答案 1 :(得分:1)
Android中的the official documentation on dialogs对此进行了描述。简而言之,您需要执行以下步骤:
DialogFragment
,以便在设备旋转时正确恢复,或以其他方式更改配置。DialogFragment
中onAttach
内的界面,并将其存储在某个字段中。别忘了在null
中设置onDetach
。或者,如果您只将此对话框用于一个活动,则可能不会声明一个界面,只是存储对该活动的引用。
答案 2 :(得分:0)
嘿,您可以在 MainActivity 类中创建一种方法。如下所示。
public void onClickOnYesButton(int id){
}
传递 MainActivity 参考,如下所示。
public YesNoDialog(MainActivity context) {
this.gContext = context;
}
使用 MainActivity 引用调用 onClickOnYessButton !
完成工作!