Android Dialog取消動作
Contents
使用AlertDialog時,當點在Dialog的外圍,Android會讓此Dialog消失,並且什麼動作都不執行。
如果剛好positive和negative的按鈕都是有明確動作的,並不想被取消,可以透過setCancelable(boolean)這個函式來強制使用者不得取消。
不過有時會希望使用者可以透過點擊按鈕或點擊Dialog外圍來執行取消動作(非null空動作),但在AlertDialog的函式庫中是無能為力的,我查了
- setOnCancelListener
- setOnDismissListener
這兩個函式都會導致程式異常停止。最後查到應該使用DialogFragment當中的onCancel動作來解決這個問題。
以下範例程式碼
public class MyDialogFragment extends DialogFragment {
private final static String TAG = "MyDialog";
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Hello")
.setPositiveButton("YA", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "Positive");
}
})
.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "Negative");
}
});
return builder.create();
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
Log.i(TAG, "OnCancel");
}
}
重點如下
- 繼承DialogFragment
- 複寫onCreateDialog方法,並回傳一個Dialog (跟以往AlertDialog的使用方法一樣)
- 複寫onCancel方法,裡面放上點擊外框使AlertDialog消失時要觸發的事件。
- 注意:如果是點positive Button或negative Button皆不會觸發這個函式。