Попытка сохранить статус радиогрупп в соответствии с переключателем выбора

#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, должен иметь отдельный класс, который моделирует состояние всех кнопок. Я отредактирую небольшой пример.