直接看代码,注释详细
package com.dialog.oo;
import java.lang.reflect.Field;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
/**
* 主类, 本文主要说明一个问题,对话框的 按钮点击事件
*
* 测试环境:android 2.3.3
*
* @author hsx
* @time 2013-4-19上午10:34:25
*/
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**
* 关于 这 几个方法的 写法 说明一下: 以前 我喜欢将所有的控件定义成全局变量, 然后
* 控件的发现放在一个叫initWidget()这样的方法 里面, 然后 控件的操作 放在一个 叫 initWidgetHandler()
* 这样的 方法里面(这2个方法的名字是我自己命名的) 但是现在 我更偏向于
* 将某个控件的发现和操作放在同一个方法里面,然后在相应的方法里面调用。 两者的各有好处,我先前的做法适用于 这个控件 关联的东西
* 很多,定义成全局的 容易获取到, 而且一次 发现(ps:我所谓的发现 是指
* 调用findViewByid()这个方法)之后,后面无需再发现, 因为
* 发现一次控件,就要遍历一次树,很耗时的操作,所以当控件时常用的时候或者关联的地方很多时,定义成全局的很好。 但是 当某个 控件与
* 其他逻辑关联度很低时,完全可以将控件的发现和操作放在一起,显得更加清晰明了,模块化的更好,更加易于阅读。
*
*/
initBtnOne();
initBtnTwo();
initBtnThree();
}
/**
* 第3个按钮 的 操作
*
* @return void
* @author hsx
* @time 2013-4-19上午10:32:04
*/
private void initBtnThree() {
//第3个对话框 的结论: 可以通过 如下的方法 修改系统的 机制,使其当 点击 AlertDialog对话框中
//的按钮时,对话框不消失
Button btnThree = (Button) findViewById(R.id.btn_three);
btnThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogThree();
}
});
}
/**
* 第2个按钮 的 操作
*
* @return void
* @author hsx
* @time 2013-4-19上午10:32:04
*/
private void initBtnTwo() {
// 第2个对话框的结论是: 直接放2个按钮到AlertDialog上面,即使2个按钮直接return
// 点击任何一个之后,对话框同样会消失。 由1,2 两个对话框可以看出,AlertDialog的按钮点击操作,系统会自动
// 控制dialog消失
Button btnTwo = (Button) findViewById(R.id.btn_two);
btnTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogTwo();
}
});
}
/**
* 第1个按钮 的 操作
*
* @return void
* @author hsx
* @time 2013-4-19上午10:32:04
*/
private void initBtnOne() {
// 第1个对话框的结论是: 直接放2个按钮到AlertDialog上面,即使2个按钮不进行任何操作
// 点击任何一个之后,对话框同样会消失。
Button btnOne = (Button) findViewById(R.id.btn_one);
btnOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogOne();
}
});
}
/**
* 第一个对话框
*
* @return void
* @author hsx
* @time 2013-4-19上午10:54:13
*/
private void dialogOne() {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("我是第一个对话框");
builder.setMessage("请直接点个按钮,按钮中没有做任何操作");
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
/**
* 第二个对话框
*
* @return void
* @author hsx
* @time 2013-4-19上午11:01:24
*/
private void dialogTwo() {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("我是第二个对话框");
builder.setMessage("请直接点个按钮,按钮中直接做return操作");
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
builder.show();
}
/**
* 第三个 对话框
*
* @return void
* @author hsx
* @time 2013-4-19上午11:12:58
*/
private void dialogThree() {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("我是第三个对话框");
builder.setMessage("请直接点个按钮,按钮中做相应操作,点击确定不会消失,点击取消消失");
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击确定不消失。
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing" );
field.setAccessible( true );
// 将mShowing变量设为false,表示对话框已关闭
field.set(dialog, false );
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击取消 则消失。
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing" );
field.setAccessible( true );
// 将mShowing变量设为true,表示对话框未关闭
field.set(dialog, true );
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
});
builder.show();
}
}