Android之不一样的AlertDialog

AlertDialog是Android中的一个标准的对话框,呈献给用户的是一个对话框样式的界面。在我们Android开发过程中会经常被使用,接下来我会逐渐向大家介绍AlertDialog的一些比较另类的使用方式。

1、在AlertDialog中,把字符串数组作为数据源以列表的方式显示。

一般我们显示一个列表,通常会用ListView,只显示字符串的话用ArrayAdapter就够了,所以要显示在aleAlertDialog中的话就写个包含listview的view,然后用AlertDialog的setview方法设置。。。具体我就不详述了,相信大家都会。但是这种方式感觉比较麻烦,又要自己写布局,又要找id,想想都烦,幸运的是,aleAlertDialog给我们提供了一种很方便的方式,AlertDialog.Buidler.setItems方法可以将一个String数组以列表的方式显示在对话框中:

String[] foods = { "饺子", "米饭", "面条" };
		alertDialog = new AlertDialog.Builder(this).setTitle("标题")
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				}).setItems(foods, new OnClickListener() {
                    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), foods[which], 0).show();
                    }
                }).create();
		Window window = alertDialog.getWindow();

		window.setGravity(Gravity.TOP | Gravity.LEFT);
		alertDialog.show();


这里有一点需要注意,setMessage和setItems不能同时使用,否则效果出不来。

2、上面已经显示了列表,那么还能不能显示更复杂一点的布局呢?答案是肯定的,我们还可以在AlertDialog上显示单选列表(带选项按钮的列表),也可以显示多选列表(带复选框的列表):

setSingleChoiceItems(foods, 0, new OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(getApplicationContext(), foods[which], 0).show();
					}
				})
第一个参数是数据源,第二个是默认选中的项,小于0或者大于数据源的长度都默认不选中。第二个是点击监听,可以为null

setMultiChoiceItems(foods, new boolean[]{false,true,false}, new OnMultiChoiceClickListener() {
					
		@Override
		public void onClick(DialogInterface dialog, int which, boolean isChecked) {
			Toast.makeText(getApplicationContext(), foods[which], 0).show();			
			}
		})
第二个参数和上一个有些不同,它是一个是否选中的数组,true代表选中,false代表不选中。

怎么样?是不是感觉很方便有没有!如果这样你就感觉很方便的话那你也太容易满足了,AlertDialog还有一个setAdapter(adapter, listener)方法,感兴趣的可以自己去试下。

3、我们都知道AlertDialog弹出的对话框无论单击任何按钮都会关闭对话框,那么怎么样才能在点击了按钮以后对话框不被关闭呢?如果想实现这个就需要到Dialog类里面去找了,

private boolean mShowing = false;
/**
     * @return Whether the dialog is currently showing.
     */
    public boolean isShowing() {
        return mShowing;
    }
 void dismissDialog() {
        if (mDecor == null || !mShowing) {
            return;
        }
我们注意到在dismissDialog方法中,如果mShowing这个属性为false的话方法就会返回,也就是说,dialog不会被dismiss掉。所以我们想实现上面所说道的功能的话,在点击按钮的事件中把mShowing这个属性设为false就可以了,至于如何去设值,那就不能指望android的api了,只有通过反射去改变了,
try {
			Field field = alertDialog.getClass().getSuperclass()
					.getDeclaredField("mShowing");
			field.setAccessible(true);
			field.set(alertDialog, isDismiss);
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
这样就可以在用户点击了按钮以后,由我们来控制在何时关闭dialog了。代码很简单,就不多说了,所有代码都在demo里。


点击下载demo


http://www.niftyadmin.cn/n/1636918.html

相关文章

OpenCV入门教程(1)-创建Mate类

1、图像的基本表示 一副尺寸为 M N 的图像可以用一个 M N 的矩阵来表示,矩阵元素的值表示这个位置上的像素的亮度,一般来说像素值越大表示该点越亮。 一般来说,灰度图用 2 维矩阵表示,彩色(多通道)图像用 3 维矩阵(M N 3)表示。对于图像显示来说,目前大部分设备都是用无符…

poj 2443 Set Operation 位运算

这个题目 是有一定价值的 以后学会这么搞了&#xff1b;哈哈 1 #include<iostream>2 #include<stdio.h>3 #include<cstring>4 #include<algorithm>5 using namespace std;6 7 int arr[10001][34];8 9 int main( ) 10 { 11 int i,j,N,M,C,u,…

Django搭建图书管理系统01

Django框架 Django是一个使用Python编写的开源Web应用程序框架。它采用了MVC&#xff08;Model-View-Controller&#xff09;的软件设计模式&#xff0c;旨在简化开发复杂的Web应用程序。 以下是Django框架的一些主要特点&#xff1a; 强大的开发工具&#xff1a;Django提供了…

Android动态加载框架DL的架构与基本原理解析

转载请注明出处http://blog.csdn.net/bboyfeiyu/article/details/42611963

OpenCV入门教程(2)-Mat类之像素的读写

一、矩阵元素的基本表达 对于单通道图像,其元素类型一般为 8U(即 8 位无符号整数),当然也可以是 16S、32F等;这些类型可以直接用 uchar、short、float 等 C/C语言中的基本数据类型表达。 如果多通道图像,如 RGB 彩色图像,需要用三个通道来表示。在这种情况下,如果依然将图像视…

数字图像处理第二次作业

摘要&#xff1a;本次实验通过运用OpenCV进行编程&#xff0c;主要完成了1.把附件图像的直方图画出&#xff1b;2.把所有图像进行直方图均衡&#xff1b;输出均衡后的图像和源图像进行比对&#xff1b;发现了均衡后图像的对比度加大等特点&#xff1b;3.进一步把图像按照对源图…

Android中Adapter中edittext,checkbox记住状态解决方案(一)

一、问题原因 我们都知道Android中的adapter的view是用了重用机制的&#xff0c;简单地说就是当屏幕中的item占满屏幕以后&#xff0c;我们滑动listview的时候&#xff0c;第一个item退出屏幕&#xff0c;最后一个item进入屏幕 View getView(final int position, View convert…

QTCreater调试时提示ptrace不允许的操作

QTCreater调试时提示ptrace不允许的操作 1. 问题描述 用QTCreater建立了一个纯C的项目&#xff0c;但是在F5调试时&#xff0c;竟然提示ptrace不允许的操作&#xff0c;修改工程配置为Debug也不管用&#xff0c;经过网上搜索&#xff0c;原来还需要修改一下系统ptrace的配置。…