android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)_第1张图片

实际效果:

android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)_第2张图片

android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)_第3张图片

android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)_第4张图片

实例代码:

一个"启动初始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{    @Override    protected 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() {            @Override            public 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() {            @Override            public 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[]{"香蕉","苹果","哈密瓜","西瓜","西红柿"};    @Override    protected 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 用户点击条目对应的索引值     */    @Override    public 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=4        final boolean[] checkedList =new boolean[]{true,false,true,false,true};        builder.setMultiChoiceItems(fruits, checkedList, new DialogInterface.OnMultiChoiceClickListener() {            /**             * 当复选框列表项状态发生变化时自动调用的方法             * @param dialog 对话框对象             * @param which 选中条目的索引值             * @param isChecked true 当前项被选中   false 当前项取消选中             */            @Override            public 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;i0){                    //删除指定索引位的字符                    sb.deleteCharAt(sb.length()-1);                }                Toast.makeText(getApplicationContext(),sb,Toast.LENGTH_LONG).show();*/            }        });        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                StringBuilder sb=new StringBuilder();                int len=fruits.length;                for(int i=0;i0){                    //删除指定索引位的字符                    sb.deleteCharAt(sb.length()-1);                }                Toast.makeText(getApplicationContext(),sb,Toast.LENGTH_LONG).show();            }        });        builder.show();    }


更多相关文章

  1. android 对话框模板布局之一
  2. Android/Ophone中的悬浮对话框和即点即关对话框
  3. android对话框代码中设置背景为透明
  4. Androidの各国语言列表
  5. android 源码编译 问题 列表
  6. Android源代码在线浏览网站列表
  7. Android实现二级列表购物车功能
  8. android 阻塞 对话框 完全阻塞 停止主进程类似于window MessageB

随机推荐

  1. mysql按照天统计报表当天没有数据填0的实
  2. MySQL数据库的主从同步配置与读写分离
  3. Mysql实验之使用explain分析索引的走向
  4. mysql开启慢查询(EXPLAIN SQL语句使用介
  5. mysql之explain使用详解(分析索引)
  6. InnoDB 类型MySql恢复表结构与数据
  7. MySQL索引使用说明(单列索引和多列索引)
  8. MySQL的索引详解
  9. 关于Mysql隔离级别、锁与MVCC介绍
  10. 详解mysql权限和索引