yiranwujixian 2012-11-19 03:38 采纳率: 100%
浏览 8706
已采纳

android怎么确定对话框返回的值是true还是false?

似乎没有简单的方法获得一个警告框来返回一个简单的值。
下边的代码不起作用(答案变量不能设置在监听器里,事实上它甚至都没有编译)

public static boolean Confirm(Context context) {
    boolean answer;
    AlertDialog dialog = new AlertDialog.Builder(context).create();
    dialog.setTitle("Confirmation");
    dialog.setMessage("Choose Yes or No");
    dialog.setCancelable(false);
    dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer = true;
        }
    });
    dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer = false;
        }
    });
    dialog.setIcon(android.R.drawable.ic_dialog_alert);
    dialog.show();
    return answer;
}

注意:很重要的是这个方法是自己包含的,也就是说,它不依赖于外部变量或者是构造。仅仅是调用它然后获得你的值,true或者是false。

所以,应该怎么做?简单的想法就是返回true或者是false,但是这似乎比它自己来获得这些值复杂得多。
而且,setButton有这个表单:

dialog.setButton(int buttonId, String buttonText, Message msg)

但是不知道怎么用到它,这个消息应该发到哪,发给谁,哪个处理器是被用到的?

  • 写回答

3条回答 默认 最新

  • yiranwujixian 2012-11-19 06:54
    关注

    我想说我对我自己的答案很满意,因为完全是靠我自己找到了一个简单的方法。
    但是事实是尽管我发现了返回一个值的方法(就是下边的),但是它不起作用。
    真正的问题是我想要一个同步的对话框,对话框在恢复代码之前在dialog.show()之后等待用户来回答
    在android中没有这样的beast。所有的对话框都是异步的,所以dialog.show()只是在一些队列中贴了这个对话框然后继续。因此不能及时的得到答案。
    对于所有的它的价值(没什么)下面你会在创建一个对话框的方法里面找到怎么设置一个值。也许这种技术还有其他的用途,不仅仅是在对话框的生命周期中。

    下边是一些相关信息,如果你用final boolean answer;替换boolean answer;我可能会说:它可能会在监听器里边访问内部变量,但是不可能为它分配一个新值,因为它是已经被声明过了的了。=
    这里关键的问题出现了。
    定义变量为

    final boolean[] answer = new boolean[1];
    

    一些人已经知道为什么这个将起作用了。这里的最后变量不是的单一的布尔数组,而是该数组本身。
    所以现在你可以指定数组element [0]

    dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer[0] = true;
        }
    });
    . . .
    return answer[0];
    

    最终你能从你的方法中返回它。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥15 this signal is connected to multiple drivers怎么解决
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
  • ¥66 如何制作支付宝扫码跳转到发红包界面