#java #android
#java #Android
Вопрос:
Я работаю над проектом, в котором у меня много переключателей в нескольких радиогруппах. Что я хотел бы сделать, так это сохранить конфигурацию всех радиогрупп в соответствии с определенной кнопкой в первой радиогруппе. Например, первая радиогруппа называется select, и у меня есть 4 разных переключателя выбора. Когда я переключаюсь с 4 кнопок внутри этой группы, я бы хотел, чтобы другие кнопки радиогруппы автоматически заполнялись тем, чем они были ранее, я также хотел бы сохранить конфигурацию текущей кнопки, когда она переключается через радиогруппу. Так, например, если переключается переключатель в первой радиогруппе, он запоминает конфигурацию предыдущей и автоматически загружается снова, когда возвращается к этому представлению.
Ответ №1:
Создайте модель, которая моделирует все это. Используйте прослушиватель изменения свойств (или множество других прослушивателей), чтобы вы могли прослушивать обновления в состоянии. Состояние будет обновляться всякий раз, когда вы вызываете сеттер для модели.
Например, когда вы устанавливаете для внешней группы переключателей значение 2-й кнопки, модель может генерировать события изменения свойств для всех кнопок, которые зависят от этого состояния. Средства получения состояния внутренних переключателей могут зависеть от состояния внешней кнопки.
Вероятно, вам потребуется добавить слушателей в представление, которые прослушивают действия пользователя на кнопках. Действия в этих прослушивателях вызовут установщики в модели. Будьте осторожны, чтобы не вызвать рекурсивные события таким образом.
Пример:
Это пример модели, которую вы могли бы построить. Допустим, у вас есть внешняя группа переключателей с 2 кнопками и одна внутренняя группа кнопок с 3 кнопками. Параметры внутренней группы всегда одинаковы, независимо от выбранной внешней кнопки.
public class Model {
private int outerSelected = 0; // 0 or 1
private InnerModel[] innerModels = new InnerModel[2];
private class InnerModel {
private int selected = 0; // 0, 1, or 2
public void setSelected(int selected) {
this.selected = selected;
// Send event
}
public int getSelected() {
return selected;
}
}
public int getSelectedInnerModel() {
return innerModels[outerSelected];
}
public int setOuterSelected(int outerSelected) {
this.outerSelected = outerSelected;
// send event for selectedInnerModel change
// If you use beans binding, this should cause the view to re-query the
// getSelected on the InnerModel as well
}
}
Я бы не советовал вам на самом деле использовать целые числа. Перечисление — лучшая идея, но я его не записывал. При желании вы можете сделать этот класс модели закрытым внутри вашего представления.
Комментарии:
1. Спасибо за ответ. Что я сделал до сих пор, так это то, что у меня есть OnCheckedChangeListener, который прослушивает, какая кнопка в основной радиогруппе выбрана. При активации он устанавливает функцию перечисления на первое, второе, третье, четвертое. Затем я слушаю изменения в других радиогруппах. Когда в других радиогруппах нажимается переключатель, я сохраняю состояние во временное логическое значение, за которым следует оператор switch, который переключает представления на основе перечисления. В этом случае я вызываю функцию сохранения для радиогруппы на основе перечисления.
2. Затем у меня есть функция загрузки, которая устанавливает состояния кнопок в соответствии с тем, что было сохранено в temp. Этот метод, похоже, работает, но он глючит, и не все настройки сохраняются и загружаются точно.
3. Ключ, IMO, должен иметь отдельный класс, который моделирует состояние всех кнопок. Я отредактирую небольшой пример.