繁体   English   中英

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

[英]how to pass an onclick handler to a custom dialog class

我正在尝试创建一个用于显示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。

感觉就像我很亲密,但我无法克服障碍。 任何人都可以帮助我连接点吗?

创建一个类(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中的对话框官方文档中有所描述。 简而言之,您需要执行以下步骤:

  1. 为对话框创建DialogFragment ,以便在设备旋转时正确恢复或以其他方式更改配置。
  2. 创建一个允许您发送对话框结果的界面。
  3. 在活动中实现此接口。
  4. 将活动DialogFragment onAttachDialogFragmentonAttach内的接口,并将其存储在某个字段中。 不要忘记在onDetach设置为null
  5. 单击对话框按钮时,可以调用相应的接口方法,活动将获得结果。

或者,如果您只将此对话框用于一个活动,则可能不会声明接口并只是存储对活动的引用。

嘿,你可以在MainActivity类中创建一个方法。 如下。

public void onClickOnYesButton(int id){

}

传递MainActivity参考,如下所示。

public YesNoDialog(MainActivity context) {
this.gContext = context;
}

并使用MainActivity引用调用onClickOnYessButton

任务完成!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM