仅在选中一项时激活AlertDialog的BUTTON_POSITIVE

时间:2018-08-29 18:47:18

标签: android android-alertdialog

我正在制作AlertDialog的多选项目,当用户按“确定”时,会得到选中的项目。这些项目将显示在TextView上。

我的问题是,仅当选择至少一项时,我才想激活AlertDialog的“确定” 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);
                 }
               }
           });
        }
    }

1 个答案:

答案 0 :(得分:1)

让您的MainActivity有一个AlertDialog字段:

private AlertDialog dialog;

分配创建的AlertDialog

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

新方法togglePositiveButtonEnabled()检查 mUserList 是否为空,并启用/禁用对话框的OK Button

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();
}