androidalertdialog对话框progressdialog
显示对话框 对话框经常作为 Activity 的一部分来创建和显示。你通常应该从 protected Dialog Activity.onCreateDialog int id 回调方法里创建对话框。当你使用这个回调函数时, Android 系统会有效的设置这个 Activity 为每个对话框的所有者,从而自动管理每个对话框 的状态并挂靠到 Activity 上。这样,每个对话框继承这个 Activity 的特定属性。比如,当 一个对话框打开时,菜单键显示为这个 Activity 定义的选项菜单,音量键修改 Activity 使 用的音频流。 注意 如果你决定在 onCreateDialog方法之外创建一个对话框,它将不会被附着到活动上。 不过,你可以通过 setOwnerActivityActivity把它附着到一个活动上。 当你想要显示一个对话框时,调用 showDialogint id 方法并传递一个唯一标识这个对 话框的整数。 当对话框第一次被请求时,Android 从你的 Activity 中调用 onCreateDialogint id,你应 该在这里初始化这个对话框 Dialog。这个回调方法被传以和 showDialogint id相同的 ID 。 当你创建这个对话框后,在 Activity 的最后返回这个对象。 在对话框被显示之前,Android 还调用了可选的回调函数 onPrepareDialogint id, Dialog. 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在 每次打开对话框时被调用,而 onCreateDialogint 仅在对话框第一次打开时被调用。如果 你不定义 onPrepareDialog,那么这个对话框将保持和上次打开时一样。这个方法也被传 递以对话框的 ID,和在 onCreateDialog中创建的对话框对象。个人理解是,在本 Activity 里第一次 show 某个 Dialog ,则先调用 onCreateDialog ,得到返回的 Dialog 对象并挂靠在 Activity,保存 Dialog 对象的引用,然后才显示 Dialog 。这样子,下次再 show Dialog 就不 用重新创建 Dialog 对象,而是重用旧的 定义 onCreateDialogint 和 onPrepareDialogint, Dialog 回调函数的最佳方法是使用一 个 switch 语句来检查传递进来的 id 参数。每个 case 应该检查一个唯一的对话框 ID 然后 创建和定义相应的对话框。比如,想象一下一个游戏使用两个不同的对话框一个用来指 示这个游戏已经暂停而另一个来指示游戏结束。首先,为每个对话框定义一个常量 static final int DIALOG_PAUSED_ID 0; static final int DIALOG_GAMEOVER_ID 1; 然后,为每一个 ID 用一个 switch case 定义这个 onCreateDialogint 回调函数 protected Dialog onCreateDialogint id { Dialog dialog; switchid { 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; } 当是时候显示其中之一的对话框时,使用对话框 ID 调用 showDialogint showDialogDIALOG_PAUSED_ID; 消除对话框 Dismissing a Dialog 当你准备关闭对话框时,你可以通过对这个对话框调用 dismiss来消除它。如果需要, 你还可以从这个 Activity 中调用 dismissDialogint id 方法,这实际上将为你对这个对话框 调用 dismiss 方法。 如果你想使用 onCreateDialogint id 方法来管理你对话框的状态(就如同在前面的章节 讨论的那样) ,然后每次你的对话框消除的时候,这个对话框对象的状态将由该 Activity 保 留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用 removeDialogint id。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消 除。 使用消除侦听器 Using dismiss listeners 如果你希望你的应用程序在一个对话框消亡的时候执行一些流程,那么你应该附着一个 on-dismiss 侦听器到对话框上。 Override protected void onPrepareDialogint id, Dialog dialog { switchid{ case PROGRESS_DIALOG dialog.setOnDismissListenernew DialogInterface.OnDismissListener{ Override public void onDismissDialogInterface dialog { Toast.makeTextgetApplicationContext, “dismiss listener“, Toast.LENGTH_SHORT .show; } }; } } 然而, 请注意对话框也可以被“取消” 。这是一个表明对话框被用户显示取消的特殊情况。这将在用户按“ 返回” 按钮时发生,或者这个对话框显示的调用 cancel (也许通过对话框 上的一个“取消” 按钮) 。当一个对话框被取消时,这个 OnDismissListener 依然会被通知到, 但是如果你希望在对话框被显示取消时被通知到(而不是通常的消除方式) ,那么你应该通 过 setOnCancelListener注册一个 DialogInterface.OnCancelListener 。 目前个人学习发现,一般情况下,调用 dialog.cancel就会触发 onCancelLister。而点击 AlertDialog 的 NegativeButton Cancel/No是不会触发的。对于 setOnCancelListener要注意 的是,这里有两个 setOnCancelListener,但返回值不同 //AlertDialog.Builder 调用的 public AlertDialog.Builder setOnCancelListener DialogInterface.OnCancelListener onCancelListen