2016-08-03 89 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