gpt4 book ai didi

android - 如何将 onclick 处理程序传递给自定义对话框类

转载 作者:太空狗 更新时间:2023-10-29 15:59:35 25 4
gpt4 key购买 nike

我正在尝试创建一个自定义类来显示是/否 AlertDialog,但我希望 onClick 处理程序位于实例化自定义类的 Activity 中。到目前为止,自定义类如下所示:

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 处理程序,当在对话框中单击"is"或“否”按钮时应调用该处理程序。

@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。

感觉已经接近了,但是就是过不去这个坎。谁能帮我把这些点联系起来?

最佳答案

创建一个类(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"
}
});

关于android - 如何将 onclick 处理程序传递给自定义对话框类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com