2016-08-03 83 views
1

我創建使用AlertDialog.Buiilder多選擇DialogFragment檢查的項目數

 mDialog = new AlertDialog.Builder(getActivity()).setIconAttribute(mIcon).setTitle(mTitle) 
      .setPositiveButton(mPositiveButton, new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        mCallbacks.onPositiveClick(((AlertDialog) getDialog()).getListView().getCheckedItemPositions(), mChoices); 
       } 
      }).setNegativeButton(mNegativeButton, new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        mCallbacks.onNegativeClick(((AlertDialog) getDialog()).getListView().getCheckedItemPositions()); 
       } 
      }).setMultiChoiceItems(mChoices, mCheckedItems, new OnMultiChoiceClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
        if (mIsCheckedRequired) { 
         AlertDialog alertDialog = ((AlertDialog) dialog); 

         if (alertDialog.getListView().getCheckedItemCount() == 0) 
          alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
         else 
          alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
        } 

       } 
      }).create(); 

我也想使禁用正面按鈕時,沒有檢查的項目多選擇對話框:

@Override 
public void onStart() { 
    super.onStart(); 
    if (mIsCheckedRequired && mDialog.getListView().getCheckedItemCount() == 0) { 
     mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
    } 
} 

mDialog.getListView() .getCheckedItemCount()總是在點擊之前重新生成0,有沒有一種方法可以在點擊之前知道已檢查的項目計數,除非有字段mCheckedItems數組並通過它運行?

+0

嘗試定製與自己的佈局文件對話框 – MathaN

回答

1

爲了更好地管理班級計數器。 和onClickOnMultiChoiceClickListener只是按照項目數重新初始化它的大小。 不要忘記在顯示對話框時將其初始化爲0。你也可以檢查你的計數器是否爲零,然後不處理OK按鈕。

希望它會幫助你:)

+0

謝謝,我知道解決方案)你能解釋我爲什麼爲例((AlertDialog)getDialog())。getListView()。 getCheckedItemPositions()正確的工作,例如在正面的按鈕點擊,但不工作onCreateDialog()或onStart()? – Vahan