AlertDialog的基本用法总结如下:
1.实例化dialog
由于AlertDialog的构造函数的关系,不能直接实例化,需要利用Builder来实例化,如
AlertDialog ad=new AlertDialog.Builder(Main.this).create();
2.设置对话框
设置除了指基本设置如title,messages,icon外,还指设置对话框的按钮,单选框,列表,复选框等。
3.show
显示对话框。
下面的代码片段展现了各种设置的用法:
1.确定和取消按钮
//确定和取消按钮
b1=(Button)findViewById(R.id.btn1);
b1.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
AlertDialog ad=new AlertDialog.Builder(MainActivity.this).create();
ad.setTitle("标题1");
ad.setIcon(R.drawable.ic_launcher);
ad.setMessage("我是消息内容");
ad.setButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
ad.setButton2("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
ad.show();
}
});
//动态创建
b3=(Button)findViewById(R.id.btn3);
b3.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
//创建布局
LayoutInflater inflater=MainActivity.this.getLayoutInflater();
View twoEditText=inflater.inflate(R.layout.twoedittext, null);
//Activity.findViewById最终还是会调用View.findViewById
//因为在Activity的onCreate中一定会先setContentView的
final EditText e1=(EditText)twoEditText.findViewById(R.id.e1);
final EditText e2=(EditText)twoEditText.findViewById(R.id.e2);
e1.setText("e1");
e2.setText("e2");
//创建对话框
AlertDialog ad=new AlertDialog.Builder(MainActivity.this).create();
ad.setView(twoEditText);//将view填充至对话框中
ad.setTitle("标题1");
ad.setIcon(R.drawable.ic_launcher);
ad.setMessage("动态创建的内容!");
ad.setButton("取值", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.v("tag",e1.getText().toString()+e2.getText());
}
});
ad.show();
}
});
3.单选列表
//单选框
b4=(Button)findViewById(R.id.btn4);
b4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String[] s={"a","b","c","d"};
AlertDialog ad=new AlertDialog.Builder(MainActivity.this).
setSingleChoiceItems(s, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.v("tag", "您选中了"+s[which]);
dialog.dismiss();
}
}).create();
ad.show();
}
});
加入单选列表、复选等列表时,需要在builder后面调用setXXXX方法后再create的,一旦create后的实例对象是没有对应的setXXXX的方法的。
4.复选列表
//复选框
b5=(Button)findViewById(R.id.btn5);
b5.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
final String[] s={"a","b","c","d"};
final AlertDialog ad=new AlertDialog.Builder(MainActivity.this)
.setMultiChoiceItems(s, null, new OnMultiChoiceClickListener(){
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
Log.v("tag", "选中了第"+which+",值为"+isChecked);
}
}).create();
//全选
final boolean[] bArray=new boolean[]{true,false,true,true};
ad.setButton("全选", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ListView lv=ad.getListView();
for(int i=0;i
由于dialog默认是会dismiss掉的,但对于复选来说,只用待用户筛选完多个选项点击确认后才可消失。所以利用反射强行让其不消失:
Field f=ad.getClass().getSuperclass().getDeclaredField("mShowing");
f.setAccessible(true);
f.set(ad, false);//false不消失,true消失
5.一般列表
//普通列表
b6=(Button)findViewById(R.id.btn6);
b6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String[] s={"q","w","s","d"};
AlertDialog ad=new AlertDialog.Builder(MainActivity.this)
.setItems(s, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.v("tag", "您选中了"+s[which]);
dialog.dismiss();
}
}).create();
ad.show();
}
});
代码下载http://download.csdn.net/detail/kkkkkxiaofei/6690817