先上代码:
package plm.Reader.JiangJun;import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;public class ReaderActivity extends Activity {
    private static final int DIALOG_INFO = 0;
/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        showDialog(DIALOG_INFO);
    }
    protected Dialog onCreateDialog( int id ){
     switch(id){
     case DIALOG_INFO:
     return new AlertDialog.Builder(this)
     .setIcon(android.R.drawable.ic_dialog_info)
     .setTitle("Hello")
     .setMessage("你好")
     .setPositiveButton("OK", null)
     .create();
     default:
     return null;
     }
    }
}上面的代码中的showDialog(DIALOG_INFO);
是怎么实现对对话框的调用的?
通篇只出现了一次showDialog,如果是onCreateDialog(DIALOG_INFO)调出对话框的话很容易理解,但showDialog(DIALOG_INFO);
这种调用方式是怎么实现的?有什么约定吗?

解决方案 »

  1.   

    一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.
    Android API 支持下列类型的对话框对象:
    警告对话框 AlertDialog:  一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
    进度对话框 ProgressDialog:  显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
    日期选择对话框 DatePickerDialog:  让用户选择一个日期.
    时间选择对话框 TimePickerDialog:  让用户选择一个时间.
    如果你希望自定义你的对话框, 可以扩展Dialog类.
    Showing a Dialog 显示对话框
    一个对话框总是被创建和显示为一个Activity的一部分. 你应该在Activity的onCreateDialog(int)中创建对话框. 当你使用这个回调函数时,Android系统自动管理每个对话框的状态并将它们和Activity连接, 将Activity变为对话框的"所有者". 这样,每个对话框从Activity继承一些属性. 例如,当一个对话框打开时, MENU键会显示Activity的菜单, 音量键会调整Activity当前使用的音频流的音量.
     
    注意: 如果你希望在onCreateDialog()方法之外创建对话框, 它将不会依附在Activity上. 你可以使用setOwnerActivity(Activity)来将它依附在Activity上.
    当你希望显示一个对话框时, 调用showDialog(int)并将对话框的id传给它.
    当一个对话框第一次被请求时,Android调用onCreateDialog(int). 这里是你初始化对话框的地方. 这个回调函数传入的id和showDialog(int)相同. 创建对话框之后,将返回被创建的对象.
    在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数. 该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.
    最好的定义onCreateDialog(int) 和onPrepareDialog(int, Dialog) 的方法就是使用一个switch语句来检查传入的id. 每个case创建相应的对话框. 例如, 一个游戏使用两个对话框: 一个来指示游戏暂停,另一个指示游戏结束. 首先, 为它们定义ID:
    static final int DIALOG_PAUSED_ID = 0;
    static final int DIALOG_GAMEOVER_ID = 1;
    然后, 在onCreateDialog(int)中加入一个switch语句:
    protected Dialog onCreateDialog(int id) {
        Dialog dialog;
        switch(id) {
        case DIALOG_PAUSED_ID:
            // do the work to define the pause Dialog
            break;
        case DIALOG_GAMEOVER_ID:
            // do the work to define the game over Dialog
            break;
        default:
            dialog = null;
        }
        return dialog;
    }