You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何将方法作为参数传入另一个方法实现弹窗回调?

Android AlertDialog 点击确认按钮执行指定方法的正确实现

原代码存在的问题

  1. 使用Method类型传递方法引用不合适,Java中处理无参无返回值的任务,应该用函数式接口(比如Runnable)来实现。
  2. 调用alert("message", "title", doWork())时,doWork()会立即执行,而不是等点击"Yes"按钮才触发,完全不符合需求。

修正后的实现方案

我们可以用Java标准的Runnable接口作为参数,它专门用于表示无参无返回值的任务,完美匹配你的需求:

1. 重构alert方法

private void alert(String message, String title, Runnable onConfirm) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(message);
    builder.setTitle(title);
    builder.setCancelable(false);

    builder.setPositiveButton("Yes", (dialog, which) -> {
        // 点击确认按钮时执行传入的任务
        if (onConfirm != null) {
            onConfirm.run();
        }
        dialog.dismiss();
    });

    builder.setNegativeButton("No", (dialog, which) -> dialog.cancel());

    AlertDialog alertDialog = builder.create();
    alertDialog.show();
}

2. 调用示例

  • 传递方法引用(适用于已有无参无返回值的方法,比如doWork()):
alert("确认执行此操作吗?", "提示", this::doWork);
  • 传递Lambda表达式(适用于需要临时添加额外逻辑的场景):
alert("确认执行此操作吗?", "提示", () -> {
    workInProgress();
    // 可以在这里添加其他关联操作
});

自定义语义化接口(可选)

如果你觉得Runnable的命名不够直观,可以自定义一个语义化的函数式接口:

@FunctionalInterface
interface ConfirmAction {
    void execute();
}

然后修改alert方法的参数类型:

private void alert(String message, String title, ConfirmAction onConfirm) {
    // 其余代码和之前一致,只是把onConfirm.run()改成onConfirm.execute()
    builder.setPositiveButton("Yes", (dialog, which) -> {
        if (onConfirm != null) {
            onConfirm.execute();
        }
        dialog.dismiss();
    });
}

调用方式和之前完全相同:

alert("确认执行此操作吗?", "提示", this::doWork);

内容的提问来源于stack exchange,提问作者Vikas Mourya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:45:57