Активируйте BUTTON_POSITIVE AlertDialog, только когда элемент отмечен - PullRequest
0 голосов
/ 29 августа 2018

Я делаю AlertDialog элементов с множественным выбором, получайте отмеченные элементы, когда пользователи нажимают «ОК». Элементы будут отображаться на TextView.

Моя проблема в том, что я хочу активировать "ok" BUTTON_POSITIVE для AlertDialog, только когда выбран хотя бы один элемент. Мой полный код и как я думаю, чтобы решить эту проблему ..

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 голосов
/ 29 августа 2018

Пусть у вашего 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();
}
...