1.继承关系
2.AlertDialog的创建方法
由于AlertDialog类的构造方法被声明成protected方法,因此,不能直接使用new关键字来创建AlertDialog类的对象实例,只能用AlertDialog。Builder.show或AlertDialog。Builder.create+AlertDialog.show方法显示对话框,或者使用activity的
showDialog(int id)方法创建并显示对话框
使用show方法显示对话框是异步的。也就是说,当调用AlertDialog。Builder.show或AlertDialog.show方法显示对话框后,show方法会立即返回,并且继续执行后面的代码。
AlertDialog。Builder.show实际上也是调用AlertDialog.show方法
public AlertDialog show() {
AlertDialog dialog=create();
dialog.show();
return dialog;
}
AlertDialog。Builder.show方式创建并显示对话框:new AlertDialog.Builder(this).setTitle()
.setPositiveButton()
.setNeutralButton(…, …)
.setNegativeButton().show()
Builder.create+AlertDialog.show方式创建并显示对话框:
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle()
.setPositiveButton()
.setNeutralButton(…, …)
.setNegativeButton().create();
dialog.show();
showDialog(int id)方法创建并显示对话框:
首先在某个函数中(比如点击响应函数)中调用showDialog:
button01.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog(dialogid);
}
});
activity会回调onCreateDialog:
@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
switch(id){
case xxx:
buildDiagxxx(MainActivity.this);
}
return null;
}
buildDiagxxx(Context context)
{
new AlertDialog.Builder(MainActivity.this).setTitle()
.setPositiveButton()
.setNeutralButton(…, …)
.setNegativeButton().create();
}
3.AlertDialog扩展
有的时候,可能需要弹出一个对话框,以便从用户的输入来获取某些确认信息。这种情况下,可以重写Activity基类中的受保护方法(protected)onCreateDialog()。
1、创建一个工程:Dialog。
2、main.xml中的代码。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
-
- <Button
- android:id="@+id/btn_dialog"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Click to display a dialog"
- android:onClick="onClick" />
-
- </LinearLayout>
3、DialogActivity.java中的代码。
- package net.horsttnann.Dialog;
-
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.app.Dialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Toast;
-
- public class DialogActivity extends Activity {
- CharSequence[] items = { "Google", "Apple", "Microsoft" };
- boolean[] itemsChecked = new boolean[items.length];
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
-
- public void onClick(View v) {
- showDialog(0);
- }
-
- @Override
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case 0:
- return new AlertDialog.Builder(this)
- .setIcon(R.drawable.ic_launcher)
- .setTitle("This is a dialog with some simple text...")
- .setPositiveButton("OK",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int whichButton) {
- Toast.makeText(getBaseContext(),
- "OK clicked!", Toast.LENGTH_SHORT)
- .show();
- }
- })
- .setNegativeButton("Cancel",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int whichButton) {
- Toast.makeText(getBaseContext(),
- "Cancel clicked!",
- Toast.LENGTH_SHORT).show();
- }
- })
- .setMultiChoiceItems(items, itemsChecked,
- new DialogInterface.OnMultiChoiceClickListener() {
- public void onClick(DialogInterface dialog,
- int which, boolean isChecked) {
- Toast.makeText(
- getBaseContext(),
- items[which]
- + (isChecked ? " checked!"
- : " unchecked!"),
- Toast.LENGTH_SHORT).show();
-
- }
- }).create();
- }
- return null;
- }
- }
4、调试。
点击按钮弹出对话框,在CheckBox上面打勾,就会弹出一个Toast提示,显示选中物件的文本信息。点击“OK”或“Cancel”按钮会使对话框消失。
想要显示对话框,首先要重写Activity基类中的onCreateDialog()方法:
- @Override
- protected Dialog onCreateDialog(int id) {
-
- }
当调用showDialog()的时候,上面被重写的方法就被调用了:
- public void onClick(View v) {
- showDialog(0);
- }
这个创建对话框的onCreateDialog()方法是一个被Activity控制的回调函数,当调用showDialog()时,onCreateDialog()回调函数就被触发了。showDialog()方法接受一个Integer参数,用来识别到底要显示哪个对话框。一般情况下,使用switch语句去判断显示不同的对话框。
想要创建一个对话框,还需要使用AlertDialog类的Builder构造器,设置不同的属性,比如图标、标题、按钮、单选框等等:
- @Override
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case 0:
- Builder builder = new AlertDialog.Builder(this);
- builder.setIcon(R.drawable.ic_launcher);
- builder.setTitle("This is a dialog with some simple text...");
- builder.setPositiveButton("OK",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int whichButton) {
- Toast.makeText(getBaseContext(), "OK clicked!",
- Toast.LENGTH_SHORT).show();
- }
- });
-
- builder.setNegativeButton("Cancel",
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int whichButton) {
- Toast.makeText(getBaseContext(), "Cancel clicked!",
- Toast.LENGTH_SHORT).show();
- }
- });
-
- builder.setMultiChoiceItems(items, itemsChecked,
- new DialogInterface.OnMultiChoiceClickListener() {
- public void onClick(DialogInterface dialog, int which,
- boolean isChecked) {
- Toast.makeText(
- getBaseContext(),
- items[which]
- + (isChecked ? " checked!"
- : " unchecked!"),
- Toast.LENGTH_SHORT).show();
- }
- });
- return builder.create();
- }
- return null;
- }