Chinaunix首页 | 论坛 | 博客
  • 博客访问: 851383
  • 博文数量: 143
  • 博客积分: 455
  • 博客等级: 一等列兵
  • 技术积分: 861
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-03 00:11
文章分类

全部博文(143)

文章存档

2018年(10)

2017年(6)

2016年(28)

2015年(14)

2014年(67)

2013年(1)

2012年(17)

我的朋友

分类: Android平台

2016-05-26 18:05:09

转载自:http://blog.csdn.net/liuhui_8989/article/details/22962649

参考网址:

最终实现效果是点击一个未保存密码的WIFI信号时,弹出如下Dialog:

1、定义Dialog的布局文件:

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android=""
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:gravity="center_horizontal"
  6.     android:orientation="vertical"
  7.     style="@style/DialogStyle">
  8.     <EditText
  9.         android:id="@+id/wifiDialogPsw"
  10.         android:layout_width="match_parent"
  11.         android:layout_height="wrap_content"
  12.         android:password="true"
  13.         android:singleLine="true"/>
  14.     <LinearLayout
  15.         android:layout_width="match_parent"
  16.         android:layout_height="wrap_content"
  17.         android:orientation="horizontal"
  18.         android:layout_weight="2">
  19.         <Button
  20.             android:id="@+id/wifiDialogCancel"
  21.             android:layout_width="wrap_content"
  22.             android:layout_height="wrap_content"
  23.             android:layout_gravity="center_horizontal"
  24.             android:text="取消"
  25.             android:layout_weight="1"/>
  26.         <Button
  27.             android:id="@+id/wifiDialogCertain"
  28.             android:layout_width="wrap_content"
  29.             android:layout_height="wrap_content"
  30.             android:layout_gravity="center_horizontal"
  31.             android:text="确定"
  32.             android:layout_weight="1"/>
  33.     </LinearLayout>
  34. </LinearLayout>
2、定义一个Dialog的子类

点击(此处)折叠或打开

  1. package com.wifi.utils;

  2. import android.app.Dialog;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;

  8. import com.example.controlpcpro.R;

  9. public class WifiPswDialog extends Dialog{
  10.     private Button cancelButton;
  11.     private Button okButton;
  12.     private EditText pswEdit;
  13.     private OnCustomDialogListener customDialogListener;
  14.     public WifiPswDialog(Context context,OnCustomDialogListener customListener) {
  15.             //OnCancelListener cancelListener) {
  16.         super(context);
  17.         // TODO Auto-generated constructor stub
  18.         customDialogListener = customListener;
  19.         
  20.     }
  21.     //定义dialog的回调事件
  22.     public interface OnCustomDialogListener{
  23.         void back(String str);
  24.     }

  25.     @Override
  26.     protected void onCreate(Bundle savedInstanceState) {
  27.         // TODO Auto-generated method stub
  28.         super.onCreate(savedInstanceState);
  29.         setContentView(R.layout.wifi_config_dialog);
  30.         setTitle("请输入密码");
  31.         pswEdit = (EditText)findViewById(R.id.wifiDialogPsw);
  32.         cancelButton = (Button)findViewById(R.id.wifiDialogCancel);
  33.         okButton = (Button)findViewById(R.id.wifiDialogCertain);
  34.         cancelButton.setOnClickListener(buttonDialogListener);
  35.         okButton.setOnClickListener(buttonDialogListener);
  36.         
  37.     }
  38.     
  39.     private View.OnClickListener buttonDialogListener = new View.OnClickListener() {

  40.         @Override
  41.         public void onClick(View view) {
  42.             // TODO Auto-generated method stub
  43.             if(view.getId() == R.id.wifiDialogCancel){
  44.                 pswEdit = null;
  45.                 customDialogListener.back(null);
  46.                 cancel();//自动调用dismiss();
  47.             }
  48.             else{
  49.                 customDialogListener.back(pswEdit.getText().toString());
  50.                 dismiss();
  51.             }
  52.         }
  53.     };
  54.     
  55. }

首先说明下Dialog中两个Button的点击事件的处理

点击(此处)折叠或打开

  1. public void onClick(View view) {
  2.             // TODO Auto-generated method stub
  3.             if(view.getId() == R.id.wifiDialogCancel){
  4.                 pswEdit = null;
  5.                 customDialogListener.back(null);
  6.                 cancel();//自动调用dismiss();
  7.             }
  8.             else{
  9.                 customDialogListener.back(pswEdit.getText().toString());
  10.                 dismiss();
  11.             }
  12.         }

参考:
对话框关闭时,调用dismiss()方法。点击“取消”时调用cancel()方法,指不再需要执行对话框上的任何功能和动作,取消对话框会自动调用dismiss()方法。
实现从对话框中返回信息,如WIFI密码


Dialog并没有提供可以直接返回数据的方法,我们可以通过创建自己的监听类实现

点击(此处)折叠或打开

  1. //定义dialog的回调事件
  2.     public interface OnCustomDialogListener{
  3.         void back(String str);
  4.     }
同样Dialog的构造方法也需要改变

点击(此处)折叠或打开

  1. public WifiPswDialog(Context context,OnCustomDialogListener customListener) {
  2.         super(context);
  3.         // TODO Auto-generated constructor stub
  4.         customDialogListener = customListener;
  5.         
  6.     }

然后我们需要在创建Dialog时候实现OnCustomDialogListener接口。
Dialog中如何传出数据呢,这是在OnClick方法中传出的。如代码中的语句:
customDialogListener.back(null);
customDialogListener.back(pswEdit.getText().toString());
3、在Acitivity中创建Dialog

点击(此处)折叠或打开

  1. WifiPswDialog pswDialog = new WifiPswDialog(ControlPCMainActivity.this,new OnCustomDialogListener() {
  2.     @Override
  3.     public void back(String str) {
  4.     // TODO Auto-generated method stub
  5.         wifiPassword = str;
  6.         if(wifiPassword != null){
  7.             int netId = localWifiUtils.AddWifiConfig(wifiResultList,wifiItemSSID, wifiPassword);
  8.             Log.i("WifiPswDialog",String.valueOf(netId));
  9.          if(netId != -1){
  10.                 localWifiUtils.getConfiguration();//添加了配置信息,要重新得到配置信息
  11.                 if(localWifiUtils.ConnectWifi(netId)){
  12.                 selectedItem.setBackgroundResource(R.color.green);
  13.              }
  14.             }
  15.             else{
  16.                 Toast.makeText(ControlPCMainActivity.this, "网络连接错误", Toast.LENGTH_SHORT).show();
  17.                 selectedItem.setBackgroundResource(R.color.burlywood);
  18.                 }
  19.             }
  20.         else{
  21.             selectedItem.setBackgroundResource(R.color.burlywood);
  22.         }
  23.     }
  24. });
  25. pswDialog.show();
创建Dialog时最主要的就是对OnCustomDialogListener接口的实现,对back()方法实现,back方法是对话框消失后执行的操作,返回的数据通过back()方法的参数str实现。
创建完成后Dialog的显示只需要通过Dialog.show()方法实现就可以了

project源码:

有错误多多指出





阅读(1860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~