Android中如何将方法作为参数传入另一个方法实现弹窗回调?
Android AlertDialog 点击确认按钮执行指定方法的正确实现
原代码存在的问题
- 使用
Method类型传递方法引用不合适,Java中处理无参无返回值的任务,应该用函数式接口(比如Runnable)来实现。 - 调用
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
相关产品推荐
相关产品推荐

