内容可更新的自定义对话框

网络上关于Android开发中,创建对话框的教程很多。其中不乏创建自定义对话框的,但讲解的大多数采用登陆框这个例子。对于登陆框来说,里面的空间都是固定不变的:两个TextView 显示“账号:”、“密码:”,两个空的TextEdit 等待用户输入。当用户按下登陆键后,读取两个框的内容登陆。如果我们想做一个Android 系统Wifi连接那样的对话框,我们会发现事情有些不同,这个对话框像下图这样:

custom_dialog

我们从图像中可以看出,这个对话框的Title 、信号强度、安全性都是动态指定的。也就是说,只有我们选中一个Wifi 热点,我们才知道这三项是什么。那个登陆框的例子,在此处就不能满足要求了。

网上有一种解决这个问题的方法,就是从Dialog 类继承一个子类,重写这个子类中的方法。这个方法固然是可行的,但是这种做法为了一个对话框,再创建一个新的类,代价太大。

我采用的方法是:在需要弹出创建一个对话框的地方,创建一个Dialog 类的实例,将Layout 装载进进去。用findViewById 方法,获取Layout 中的控件,进行更新。更新好后,在调用Dialog 的show() 方法。有一点要特别注意的是,findViewById 方法不是Activity.this 的,而是这个Dialog 实例的。

实现代码:

[java]
Dialog alertDialog = new Dialog(MainActivity.this);
alertDialog.setTitle("连接:" + wifiManager.getSSID(wifiSelect));
alertDialog.setContentView(R.layout.wifi_login);
TextView txtLevel = (TextView)alertDialog.findViewById(R.id.txtLevel);
txtLevel.setText(String.valueOf(wifiManager.getLevel(wifiSelect)));
TextView txtCap = (TextView)alertDialog.findViewById(R.id.txtEncryptionMode);
txtCap.setText(wifiManager.getCap(wifiSelect));
alertDialog.show();
[/java]

Layout 布局文件很简单,这里就省略了,效果图像下面这样:

custom_dialog2

可以看出对话框中的TextView 中的内容,根据不同的Wifi 热点对应更新。