实际效果:

实例代码:

一个"启动初始Activity.xml"

一个弹出的Activity

业务逻辑代码:

package com.hsj.example.alertdialogdemo04;import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import java.lang.reflect.Field;public class MainActivity extends AppCompatActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}private AlertDialog dialog;/*** 自定义对话框* @param view*/public void customerDialog(View view){AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle("登录提示");builder.setCancelable(false);View loginView=View.inflate(this,R.layout.login_view_02,null);final EditText editText_userName= (EditText) loginView.findViewById(R.id.editText_userName);final EditText editText_pwd= (EditText) loginView.findViewById(R.id.editText_pwd);builder.setView(loginView);//设置对话框的自定义View布局builder.setPositiveButton("登录", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String userName=editText_userName.getText().toString();String pwd=editText_pwd.getText().toString();if(TextUtils.isEmpty(userName)){editText_userName.setError("用户名必须输入");editText_userName.requestFocus();closeDialog(dialog,false);return;}editText_pwd.requestFocus();if(TextUtils.isEmpty(pwd)){editText_pwd.setError("密码必须输入!");editText_pwd.requestFocus();closeDialog(dialog,false);return;}if("admin".equals(userName) && "123".equals(pwd)){Toast.makeText(getApplicationContext(),userName+"登录成功",Toast.LENGTH_LONG).show();closeDialog(dialog,true);}else {closeDialog(dialog,false);Toast.makeText(getApplicationContext(),"用户名或者密码错误!",Toast.LENGTH_LONG).show();}}});builder.setNegativeButton("重置", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {editText_userName.setText(null);editText_pwd.setText("");editText_userName.requestFocus();}});dialog= builder.show();}/*** 决定是否关闭对话框* @param dialog 对话框对象* @param isClosed 对话框是否显示  true:关闭  false:不关闭*/private void closeDialog(DialogInterface dialog, boolean isClosed) {//1.得到当前AlertDialog 的类模板对象Class clz_alertDialog= dialog.getClass();//2.得到当前类的父类的类模板Class clz_dialog=clz_alertDialog.getSuperclass();try {Field mShowing_Filed= clz_dialog.getDeclaredField("mShowing");//如果私有字段想在类外访问,则必须取消java 语法检查mShowing_Filed.setAccessible(true);mShowing_Filed.set(dialog,isClosed);} catch (Exception e) {e.printStackTrace();}System.out.println("==closeDialog(DialogInterface dialog="+dialog+", boolean isClosed="+isClosed+")==");}
}

1.列表对话框的使用

2.单选列表对话框的使用

3.复选列表对话框的使用

123示例代码:

public class MainActivity_bak03 extends AppCompatActivity  implements DialogInterface.OnClickListener{private CharSequence[] fruits =new CharSequence[]{"香蕉","苹果","哈密瓜","西瓜","西红柿"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** 列表对话框的使用* @param view*/public void list(View view){AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle("水果提示");//builder.setMessage("看看有你喜欢的水果吗?");如果设置其他类型的对话框则这行代码必须不写,否则无效果builder.setItems(fruits,this);//设置当前对话框为列表对话框builder.create().show();}/*** 当用户点击对应的条目时自动调用的方法* @param dialog 对话框* @param which 用户点击条目对应的索引值*/@Overridepublic void onClick(DialogInterface dialog, int which) {CharSequence fruit=fruits[which];Toast.makeText(this, "fruit="+fruit, Toast.LENGTH_SHORT).show();System.out.println("===onClick(DialogInterface dialog="+dialog+", int which="+which+") ====");//销毁对话框dialog.dismiss();}/*** 单选列表对话框的使用* @param view*/public void radioList(View view){AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle("水果提示");builder.setSingleChoiceItems(fruits,//单选列表对话框的数据源2,//哪些数据被选中,-1:表示不选中.0代表索引为0的数据项被选中,1:代表索引为1的数据项被选中,依次类推....this);//设置单选列表对话框builder.create().show();}/*** 复选列表对话框的使用* @param view*/public void multiList(View view){AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle("水果提示");//指定数据源中对应的数据项是否被选中,true 被选中,false 未被选中;这个数组中元素的个数一定要和数据源中数据元素的个数一一对应,//否则,如果当前boolean 数组中元素的个数多于数据源中源的个数,没有问题,但如果小于数据源中源的个数则报索引越界异常:java.lang.ArrayIndexOutOfBoundsException: length=4; index=4final boolean[] checkedList =new boolean[]{true,false,true,false,true};builder.setMultiChoiceItems(fruits, checkedList, new DialogInterface.OnMultiChoiceClickListener() {/*** 当复选框列表项状态发生变化时自动调用的方法* @param dialog 对话框对象* @param which 选中条目的索引值* @param isChecked true 当前项被选中   false 当前项取消选中*/@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {System.out.println("==onClick(DialogInterface dialog="+dialog+", int which="+which+", boolean isChecked="+isChecked+")===");System.out.println("checkedList="+ Arrays.toString(checkedList));/*StringBuilder sb=new StringBuilder();int len=fruits.length;for(int i=0;i<len;i++){if(checkedList[i]){sb.append(fruits[i]).append(",");}}if(sb.length()>0){//删除指定索引位的字符sb.deleteCharAt(sb.length()-1);}Toast.makeText(getApplicationContext(),sb,Toast.LENGTH_LONG).show();*/}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {StringBuilder sb=new StringBuilder();int len=fruits.length;for(int i=0;i<len;i++){if(checkedList[i]){sb.append(fruits[i]).append(",");}}if(sb.length()>0){//删除指定索引位的字符sb.deleteCharAt(sb.length()-1);}Toast.makeText(getApplicationContext(),sb,Toast.LENGTH_LONG).show();}});builder.show();}

android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)相关推荐

  1. java中如何创建对话框_Java – 如何创建自定义对话框?

    如果你不需要太多的自定义行为的方式,JOptionPane是一个很好的时间保护.它负责确定/取消选项的放置和本地化,并且是一种快速而又脏的方式来显示自定义对话框,而不需要定义自己的类.大多数时候,JO ...

  2. android alertdialog view,Android AlertDialog 方法setView(view,0,0,0,0)开发自定义对话框

    如果使用 m_currDlg = new AlertDialog.Builder(m_activity).create(); m_currDlg.setView(textEntryView,0,0,0 ...

  3. 如何在android中创建自定义对话框?

    本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...

  4. Android开发学习笔记-自定义对话框

    系统默认的对话框只能显示简单的标题内容以及按钮,而如果想要多现实其他内容则就需要自定义对话框,下面是自定义对话框的方法. 1.先定义对话框的模版 <?xml version="1.0& ...

  5. AlertDialog实现提示框初体验+自定义对话框

    一共五个部分: 1.确认对话框 2.单选对话框 3.多选对话框 4.列表对话框 5.自定义对话框 目录结构: MainActivity.class package com.superxingyun.d ...

  6. wxWidgets:使用自定义对话框

    wxWidgets:使用自定义对话框 wxWidgets:使用自定义对话框 介绍 使用自定义对话框 构建自定义对话框 wxWidgets:使用自定义对话框 介绍 很明显,通用对话框只能满足通用需求,并 ...

  7. InstallShield自定义对话框浅谈(转)

    说明:本文档的InstallShield为6.22版本,语言:中文.操作系统为Windows2000.资源编辑工具:Microsoft Visual C ++ 6.0.修改的DLL:_isuer.dl ...

  8. wxWidgets:使用自定义对话框和 sizer

    wxWidgets:使用自定义对话框和 sizer wxWidgets:使用自定义对话框和 sizer Sizer 简介 带有 Sizer 的自定义对话框 wxWidgets:使用自定义对话框和 si ...

  9. android 继承dialog自定义对话框

    android  继承dialog自定义对话框 样式如下: 代码实现: 主要Activity: public class MainActivity extends Activity { Button ...

最新文章

  1. 使用windows.name解决js跨域数据通信
  2. 打造自己的树莓派监控系统3--canvas.js绘制数据
  3. php 接收 oc 图片上传,php yii2接口中图片上传
  4. nginx配置---upstream
  5. oracle 物化视图、中间表的方案
  6. 我对DevOps的理解
  7. Nunit中如何进行事务性单元测试
  8. 洛谷P3613 睡觉困难综合征
  9. 如何打开VMware的vmdk虚拟磁盘文件
  10. PAT 1089 狼人杀-简单版(20 分)- 乙级
  11. [高数][高昆轮][高等数学上][第二章-导数与微分]05.函数的微分
  12. python基于PIL模块实现矩阵与图像数据互相转换
  13. Data Lake Analytics,大数据的ETL神器! 1
  14. 如何将pdf转换成txt破解版
  15. 小白文件管理器共享服务器,在WIN7下使用小白文件管理器局域网功能(SMB)的教程...
  16. 在web页面打开pdf文件并打印
  17. c语言写股票交易软件,写股票软件
  18. 微信公众号如何嵌入照片征集视频征集小程序
  19. Indexes in PostgreSQL — 7 (GIN)
  20. python网络编程案例—五子棋游戏

热门文章

  1. BRCM5.02编译九:cannot find -lncurses
  2. 安检x光机原理计算机实现,安检x光机成像原理介绍
  3. 【跃迁之路】【448天】刻意练习系列207(2018.04.29)
  4. 大数据让人们得到更加细致和人性化的服务
  5. 基于CentOS 6.8平台最新源代码包编译安装企业版MariaDB数据库
  6. IOS热更新-JSPatch实现原理+Patch现场恢复
  7. git cherry-pick简介
  8. form 为什么上传文件enctype现场
  9. 最大全0/1子矩阵的探究
  10. Android中Activity之间的数据传递(Intent和Bundle)