Android中AlertDialog的使用小结

最近在做一个libgdx的项目,遇到很多和android相关的技术问题,其中在android子项目中如何实现对话框提示信息就是一个,原以为很简单,就是构造一个Dialog,然后show出来,给个按钮关闭事件就可以了,没想到还是费了一番周折。

一、按照固有想法实现,出现问题。

将以下方法放到了项目业务逻辑判断方法中了,总之,没有放到onCreate方法之中。   

    AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle("提示");

    builder.setMessage("微信客户端没有安装");

    builder.setNegativeButton("确定", null);

    builder.show();

出现问题:

08-07 10:44:04.850: E/AndroidRuntime(15528): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

网上有解决办法说:

在上面的代码的前后加上

Looper.prepare();

......

Looper.loop();

对话框成功提示了一次,然后程序就崩溃退出了。

然后在网上查找原因和解决办法,自己在没有了解清楚android消息机制之前,想快速解决这个问题,就是百度、google一顿搜,然后贴上网友的代码一顿试,后来又看到Handle、主线程、子线程和sendMessage之类的介绍,感觉好像应该试试

二、加入Handle,重新梳理思路,接近成功。

在onCreate方法中定义Handle,将对话框提示代码抽象出来写成方法,在业务逻辑处用handle.sendMessage(1),向主线程发送消息,处理消息中显示对话框。

onCreate中的代码:

mHandler = new Handler() {

    public void handleMessage(Message msg) {

        switch (msg.what) {

    case 1:

    showDialog(getBaseContext());

}

};

};

对话框方法代码:

private void showDialog(Context context) {

AlertDialog.Builder builder = new AlertDialog.Builder(context);

builder.setTitle("提示");

builder.setMessage("微信客户端没有安装");

builder.setNegativeButton("确定", null);

builder.show();

}

业务逻辑处调用代码:

Message msg = new Message();

msg.what = 1;

mHandler.sendMessage(msg);


结果红色代码块那里报错了:

  08-07 15:35:16.687: E/AndroidRuntime(5057): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

有网友说:

必须使用Activity的Context对象

三、修改代码,成功显示。

将红色代码改成

MainActivity.this

注:该Activity就是你当前的要是对话框的Activity名称。

运行程序,成功显示对话框。


你可能感兴趣的:(android,dialog,libgdx)