Выбор одного флажка из нескольких флажков и выбор пользователем флажка


У меня есть 16 флажков в действии, из которых пользователь должен выбрать любой 1 из 8 флажков.
Таким образом, в конечном итоге пользователь будет выбирать 2 флажка из 16 из них.

Обновление. Флажки уже есть в XML-файле макета. Итак, у меня есть доступ к их идентификаторам.

До сих пор я думал реализовать простой прослушиватель onCheckedChange и в блоке case переключателя выбрать любой 1 флажок из 8 и отменить выбор остальных 7 из них. Но такой подход крайне болезненный.

Кроме того, когда мне нужно будет извлечь, какой из них выбран, это будет полная неразбериха.

Итак, каков самый простой, но гибкий способ сделать обе эти вещи? Предложения приветствуются
Спасибо


person beerBear    schedule 08.01.2013    source источник
comment
используйте две группы RadioGroup , каждая из которых будет содержать 8 radioButtons   -  person Houcine    schedule 08.01.2013
comment
Радиогруппа - правильный вариант для этого сценария. Две группы радиогрупп по 8 радиокнопок в каждой сделают свою работу!   -  person Gridtestmail    schedule 08.01.2013
comment
@Houcine и @Gridtestmail Спасибо за ответ. Я использую флажки и не хотел бы использовать RadioGroup. Я знаю, как просто его использовать. Но я бы хотел придерживаться только флажков... пока :D   -  person beerBear    schedule 08.01.2013
comment
то вы должны сделать это отдельно, к сожалению!   -  person Gridtestmail    schedule 08.01.2013
comment
если вы сделали это с флажками, пользователь может отметить их все, если захочет, а это не то, что вы хотите :), вы хотите, чтобы он отметил только один из 8 возможных вариантов   -  person Houcine    schedule 08.01.2013
comment
gist.github.com/4492417   -  person user    schedule 09.01.2013
comment
@Luksprog Эй, Luksprog, спасибо за пример, но я уже реализовал его. Большое спасибо за помощь: D Кроме того, вы можете опубликовать это в ответ? Буду рад отметить это и помочь другим ребятам здесь :)   -  person beerBear    schedule 09.01.2013


Ответы (2)


Вы можете одновременно проверять только один CheckBox (аналогично RadioGroup), сгруппировав их в массив (для легкого доступа и обработки), а также установив OnClickListener для каждого из них, чтобы установить статус:

CheckBox[] chkArray = new CheckBox[8];
chkArray[0] = (CheckBox) findViewById(R.id.cb1R1);
chkArray[0].setOnClickListener(mListener);
chkArray[1] = (CheckBox) findViewById(R.id.cb2R1); // what id do you have?
chkArray[1].setOnClickListener(mListener);
// so on for the rest of the 8 CheckBoxes

private OnClickListener mListener = new OnClickListener() { 

     @Override
     public void onClick(View v) {
        final int checkedId = v.getId();
        for (int i = 0; i < chkArray.length; i++) {
            final CheckBox current = chkArray[i];
            if (current.getId() == checkedId) {
                 current.setChecked(true);
            } else {
                 current.setChecked(false);
            }
       }    
    }
};
person user    schedule 09.01.2013
comment
@IntelliJAmiya Используйте ... if (current.getId() == checkedId) { current.setChecked(current.isChecked()); } ... . - person user; 25.11.2016
comment
Ваша логика мне помогла. - person IntelliJ Amiya; 29.11.2016

просто дайте им простые имена, такие как list1box1 list1box2.... list2box1 list2box2... имеют два массива для имен - list1array - list2array

у вас все еще есть тот же слушатель, что и сейчас: внутри слушателя сначала выполните оператор if, чтобы проверить, является ли щелкнутый элемент элементом list1 или list2, и на основе этого просто используйте цикл for, который перебирает все элементы в этом конкретном списке и ставит/снимает галочки.

для извлечения просто проверьте каждый массив, какие элементы проверены или нет

person krilovich    schedule 08.01.2013
comment
Спасибо за ответ. Здесь (ссылка PasteBin) — моя текущая реализация. Не могли бы вы уточнить мой код? Я чувствую, что первый if, о котором вы говорили, о проверке элемента, которому list array он принадлежит, может быть выполнен, но цикл for, который выполняет итерацию по всем элементам в определенном списке и проверяет одно поле/ снять галочки со всех остальных будет невозможно? - person beerBear; 09.01.2013
comment
нвм у меня есть ответ. Я реализовал это самым простым, но болезненным способом. - person beerBear; 09.01.2013