如何復用AlertDialog

看瞭很多關於AlertDialog的文章,很少提起復用的問題
一般情況下整齊一點的調用隻有下面這樣:

1、定義final標志

[html]
final int TIME_DIALOG = 1, REPEAT_DIALOG = 2, EVERY_DIALOG = 3, 
                DATE_DIALOG2 = 4; 

 final int TIME_DIALOG = 1, REPEAT_DIALOG = 2, EVERY_DIALOG = 3,
     DATE_DIALOG2 = 4;
2、準備生成Dialog方法

[html]
/** 
     * 創建對話框 
     */ 
    @Override 
    public Dialog onCreateDialog(int id) { 
        Dialog dialog = null; 
        switch (id) { 
        /** 
         * 開始 
         */ 
        case TIME_DIALOG: 
            //處理邏輯 
            break; 
        default: 
            break; 
        } 
        return dialog; 
    } 

/**
  * 創建對話框
  */
 @Override
 public Dialog onCreateDialog(int id) {
  Dialog dialog = null;
  switch (id) {
  /**
   * 開始
   */
  case TIME_DIALOG:
   //處理邏輯
   break;
  default:
   break;
  }
  return dialog;
 }
2、在方法中調用

 

[html]
/** 
 * 時間按鈕點擊事件 
 */ 
btntime.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        showDialog(TIME_DIALOG); 
    } 
}); 
/** 
 * 重復按鈕點擊事件 
 */ 
btnrepeat.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        showDialog(REPEAT_DIALOG); 
    } 
}); 

    /**
     * 時間按鈕點擊事件
     */
    btntime.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      showDialog(TIME_DIALOG);
     }
    });
    /**
     * 重復按鈕點擊事件
     */
    btnrepeat.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      showDialog(REPEAT_DIALOG);
     }
    });

但實際上,這樣仍然需要創建多個dialog,不能實現dialog的復用在下經常長時間研究,終於想出如下辦法:
1、調用創建方法

[html]
case R.id.contact_batch_del: 
    openDialog(AppData.DIALOG1); 
    break; 
case R.id.contact_batch_star: 
    openDialog(AppData.DIALOG2); 
    break; 

  case R.id.contact_batch_del:
   openDialog(AppData.DIALOG1);
   break;
  case R.id.contact_batch_star:
   openDialog(AppData.DIALOG2);
   break;

 

2、創建dialog

 

[html]
public void openDialog(final int id) { 
    new AlertDialog.Builder(context) 
            .setPositiveButton(R.string.contact_ok, new 
 
            DialogInterface.OnClickListener() { 
                public void onClick 
 
                (DialogInterface dialog, int 
 
                whichButton) { 
                    /* 
                     * User 
                     *  
                     * clicked OK so do some stuff 
                     */ 
                    doBatch(id); 
                } 
            }).setNegativeButton(R.string.contact_cancel, new 
 
            DialogInterface.OnClickListener() { 
                public void onClick 
 
                (DialogInterface dialog, int 
 
                whichButton) { 
                    /* 
                     * User 
                     *  
                     * clicked Cancel so do some stuff 
                     */ 
 
                    dialog.dismiss(); 
                } 
            }).create().show(); 

 public void openDialog(final int id) {
  new AlertDialog.Builder(context)
    .setPositiveButton(R.string.contact_ok, new

    DialogInterface.OnClickListener() {
     public void onClick

     (DialogInterface dialog, int

     whichButton) {
      /*
       * User
       *
       * clicked OK so do some stuff
       */
      doBatch(id);
     }
    }).setNegativeButton(R.string.contact_cancel, new

    DialogInterface.OnClickListener() {
     public void onClick

     (DialogInterface dialog, int

     whichButton) {
      /*
       * User
       *
       * clicked Cancel so do some stuff
       */

      dialog.dismiss();
     }
    }).create().show();
 }

 

3、執行內部方法

 

[html]
public void doBatch(int id) { 
            switch (id) { 
            case AppData.DIALOG1: 
                int count = oaController.delContactList(chosenList); 
                Tools.showToast(context, "有" + count + "個聯系人被處理!"); 
                break; 
            case AppData.DIALOG2: 
                count = oaController.starContactList(chosenList); 
                Tools.showToast(context, "有" + count + "個聯系人被處理!"); 
                break; 
            default: 
                break; 
            } 
        } 

 public void doBatch(int id) {
    switch (id) {
    case AppData.DIALOG1:
     int count = oaController.delContactList(chosenList);
     Tools.showToast(context, "有" + count + "個聯系人被處理!");
     break;
    case AppData.DIALOG2:
     count = oaController.starContactList(chosenList);
     Tools.showToast(context, "有" + count + "個聯系人被處理!");
     break;
    default:
     break;
    }
   }

 

如此以來,大功告成!
本人特別喜歡整齊而又簡單的代碼,復用性強。

本博出自博主手書,轉載請說明出處,以規避法律責任!謝謝合作!

發佈留言