仅在选中项目时激活 AlertDialog BUTTON_POSITIVE

Activate BUTTON_POSITIVE of AlertDialog only when an item is checked

我正在做一个 AlertDialog 的多选项目,当用户按下 "ok" 时得到选中的项目。这些项目将显示在 TextView

我的问题是我想激活 AlertDialog 的 "ok" BUTTON_POSITIVE 只有当至少选择了一个项目时。我的完整代码以及我想如何解决这个问题..

public class MainActivity extends AppCompatActivity {

    Button mORder;
    TextView mItemSelected;
    String[] listItems;
    boolean[]checkedItems;
    ArrayList<Integer> mUserItems= new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mORder=findViewById(R.id.btnOrder);
        mItemSelected=findViewById(R.id.selectedItems);

        listItems=getResources().getStringArray(R.array.shopping_items);
        checkedItems=new boolean[listItems.length];
        mORder.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                final AlertDialog.Builder mBuilder= new AlertDialog.Builder(MainActivity.this);
                mBuilder.setTitle("Practice language");
                mBuilder.setMultiChoiceItems(listItems, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {

                    @Override
                    public void onClick(DialogInterface dialogInterface, int position, boolean ischecked) {
                        if(ischecked){
                            mUserItems.add(position);
                        }
                        else {
                            mUserItems.remove(Integer.valueOf(position));
                        }
                    }
                });
                mBuilder.setCancelable(false);
                mBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int position) {
                        String item="";
                        for(int i=0 ;i<mUserItems.size();i++){
                            item= item + listItems[mUserItems.get(i)];
                            if (i != mUserItems.size()-1){
                                item=item+ ", ";
                            }
                        }
                        mItemSelected.setText(item);
                    }
                });
                final AlertDialog dialog =mBuilder.create();
                dialog.show();
                Log.i("userList ",""+mUserItems.size());
                if((mUserItems.size()==0)){   
                   ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
                 }
                 else {                 
                    ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                 }
               }
           });
        }
    }

让你的 MainActivity 有一个字段 AlertDialog:

private AlertDialog dialog;

分配创建的 AlertDialog:

// ... at the end of onCreate()...
dialog = builder.create();
dialog.show();
Log.i("userList ",""+mUserItems.size());
togglePositiveButtonEnabled();

新方法togglePositiveButtonEnabled()检查mUserList是否为空以及enables/disables对话框的OKButton:

void togglePositiveButtonEnabled(){
    if(dialog == null) return;
    if((mUserItems.size()==0)){
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
    }
    else{
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
    }
}

也可以从 OnMultiChoiceClickListener:

内部调用此方法
@Override
public void onClick(DialogInterface dialogInterface, int position, boolean ischecked){
    if(ischecked){
        mUserItems.add(position);
    } 
    else {
        mUserItems.remove(Integer.valueOf(position));
    }
    togglePositiveButtonEnabled();
}