У меня есть 16 флажков в действии, из которых пользователь должен выбрать любой 1 из 8 флажков.
Таким образом, в конечном итоге пользователь будет выбирать 2 флажка из 16 из них.
Обновление. Флажки уже есть в XML-файле макета. Итак, у меня есть доступ к их идентификаторам.
До сих пор я думал реализовать простой прослушиватель onCheckedChange и в блоке case переключателя выбрать любой 1 флажок из 8 и отменить выбор остальных 7 из них. Но такой подход крайне болезненный.
Кроме того, когда мне нужно будет извлечь, какой из них выбран, это будет полная неразбериха.
Итак, каков самый простой, но гибкий способ сделать обе эти вещи? Предложения приветствуются
Спасибо
Выбор одного флажка из нескольких флажков и выбор пользователем флажка
Ответы (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
@IntelliJAmiya Используйте ... if (current.getId() == checkedId) { current.setChecked(current.isChecked()); } ... .
- person user; 25.11.2016
Ваша логика мне помогла.
- person IntelliJ Amiya; 29.11.2016
просто дайте им простые имена, такие как list1box1 list1box2.... list2box1 list2box2... имеют два массива для имен - list1array - list2array
у вас все еще есть тот же слушатель, что и сейчас: внутри слушателя сначала выполните оператор if, чтобы проверить, является ли щелкнутый элемент элементом list1 или list2, и на основе этого просто используйте цикл for, который перебирает все элементы в этом конкретном списке и ставит/снимает галочки.
для извлечения просто проверьте каждый массив, какие элементы проверены или нет
person
krilovich
schedule
08.01.2013
Спасибо за ответ. Здесь (ссылка PasteBin) — моя текущая реализация. Не могли бы вы уточнить мой код? Я чувствую, что первый
if
, о котором вы говорили, о проверке элемента, которому list array
он принадлежит, может быть выполнен, но цикл for
, который выполняет итерацию по всем элементам в определенном списке и проверяет одно поле/ снять галочки со всех остальных будет невозможно?
- person beerBear; 09.01.2013
нвм у меня есть ответ. Я реализовал это самым простым, но болезненным способом.
- person beerBear; 09.01.2013
RadioGroup
, каждая из которых будет содержать 8radioButtons
- person Houcine   schedule 08.01.2013RadioGroup
. Я знаю, как просто его использовать. Но я бы хотел придерживаться только флажков... пока :D - person beerBear   schedule 08.01.2013