Отключить элементы-флажки в alertDialog

android android-alertdialog

958 просмотра

4 ответа

Я даю массив для выбора нескольких опций через диалоговое окно оповещения. Я хочу отключить выбор, если массив заполнен

Я смог остановить добавление элементов в массив после того, как он достигнет предела, но не смог отключить флажки

 AlertDialog.Builder builder=new AlertDialog.Builder(this);
 View view=inflater.inflate(R.layout.dialog_genre,null,false);
 builder.setView(view).setTitle("Select Genres");

 builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if(isChecked) {
                if (!selectedgenre.contains(String.valueOf(which)))
                    if(selectedgenre.size()<5)
                {
                    selectedgenre.add(String.valueOf(which));
                    checkedGenres[which]=true;
                }
                else{
                        Toast.makeText(getApplicationContext(),"you can't add more genres",Toast.LENGTH_LONG).show();
                    }
            }
            else if (selectedgenre.contains(String.valueOf(which)))
            {
             selectedgenre.remove(String.valueOf(which));
             checkedGenres[which]=false;
        }
    }
}

введите описание изображения здесь

Автор: rookieDeveloper Источник Размещён: 08.11.2019 11:13

Ответы (4)


2 плюса

Представления внутри ListView можно использовать повторно, поэтому элементы на самом деле не связаны с представлением . Однако вы можете включить или отключить представление, когда оно добавляется в ListView внутри ListView вашего AlertDialog. ViewGroup.setOnHierarchyChangeListener позволяет вам сделать это.

    final CharSequence[] items = new CharSequence[]
            {"9×19mm Sidearm", ".40 Dual Elites", "228 Compact", "Night Hawk .50C"};
    boolean[] checkedItems = new boolean[]{false, false, true, true};
    final boolean[] disabledItems = new boolean[]{false, true, false, true};

    Context context = this;
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setTitle("Select your pistol");

    dialogBuilder.setMultiChoiceItems(items, checkedItems,
            new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i, boolean checked) { 

        }
    });

    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.getListView().setOnHierarchyChangeListener(
            new ViewGroup.OnHierarchyChangeListener() {
        @Override
        public void onChildViewAdded(View parent, View child) {
            CharSequence text = ((AppCompatCheckedTextView)child).getText();
            int itemIndex = Arrays.asList(items).indexOf(text);
            child.setEnabled(disabledItems[itemIndex]);
        }

        @Override
        public void onChildViewRemoved(View view, View view1) {
        }
    });

    alertDialog.show();

Результат примера кода (Android 9, API 28)

Обратите внимание, что setEnableне будет вызывать clickListeners для запуска. Если вы не хотите, чтобы ваш флажок нажал добавить child.setOnClickListener(null).

Автор: Borda Размещён: 30.09.2018 12:05

0 плюса

В другой части установите флажок «clickable false» на свой флажок, а также измените цвет, чтобы пользователь мог его идентифицировать.

Автор: VNS Размещён: 20.08.2016 12:13

0 плюса

   builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if(isChecked) {
                    if (!selectedgenre.contains(String.valueOf(which)))
                        if(selectedgenre.size()<5)
                    {
                        selectedgenre.add(String.valueOf(which));
                        checkedGenres[which]=true;
                    }
                    else{
                        //set your checkbox to false here
                        //yourCheckbox.setchecked(false); 
                            Toast.makeText(getApplicationContext(),"you can't add more genres",Toast.LENGTH_LONG).show();
                        }
                }
                else
                {
                 selectedgenre.remove(String.valueOf(which));
                 checkedGenres[which]=false;
            }
        }
    }

Попробуйте с этим .. проблема в остальной части

Автор: Nikhil Borad Размещён: 20.08.2016 11:11

0 плюса

Решение

Хорошо, я решил проблему, через два дня я узнал, что отключение флажка - длительный и беспокойный процесс, но мы можем запретить выбор, и это то, что я хотел сделать. вот мое решение

    builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
        int count = 0;
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if(isChecked) {
                if (!selectedgenre.contains(String.valueOf(array[which])))
                    if(selectedgenre.size()<5)
                {
                    selectedgenre.add(String.valueOf(array[which]));
                    checkedGenres[which]=true;                    
                }
                else{
                        count--;
                        ((AlertDialog) dialog).getListView().setItemChecked(which, false);
                        checkedGenres[which]=false;
                        Toast.makeText(getApplicationContext(),"you can't add this genre",Toast.LENGTH_LONG).show();
                    }
            }
            else if (selectedgenre.contains(String.valueOf(array[which])))
            {
                selectedgenre.remove(String.valueOf(array[which]));
                checkedGenres[which]=false;
            }
        }
    }
Автор: rookieDeveloper Размещён: 23.08.2016 03:56
Вопросы из категории :
32x32