Android: эффективный дизайн SW для переключения значений многих видов из двух наборов по команде пользователя - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть приложение, которое содержит TextViews и ImageButtons, организованные в различных макетах.

Это приложение получает данные с сервера, и эти данные используются для заполнения TextViews и изменения значков ImageButtons.

На экране отображаются данные одного агента, и система должна поддерживать несколько агентов (скажем, два для простоты, передний план и фон).

Я должен предоставить меню, чтобы выбрать, какой агент отображать данные наПредставления (при переключении агентов переднего плана и фона мне нужно показать последние значения, полученные для бывшего агента фона).В любой момент времени на экране могут отображаться только данные одного агента, и я не могу использовать несколько действий.

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

Базовая попытка:

  • Не дублировать представления, только дублировать содержимое (состояние значка, строки ...)
  • КаждоеКогда получено обновление для агента, сохраните его в структуре данных этого агента (не пропустите «фоновые» данные агента)
  • Обновляйте только представления для текущего «переднего» агента
  • Когда пользователь запрашивает переключение агента (отображает данные фонового агента), обновите все представления содержимым нового «переднего» агента, вызвав функцию, которая вызывает все функции, которые я использую для обновления представлений при появлении нового значения

Желаемая попытка:

  • иметь единый макет графического интерфейса, который содержит все представления для агента для каждого возрастаnt
  • Скрыть / показать этот макси-макет, когда требуется переключение агента

Однако я не знаю точно, как это реализовать: возможно ли это?У вас есть предложения?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2011

Вот как я решил разработать программное обеспечение. С двумя классами я сделал чистый дизайн, который очень прост в использовании, с небольшим компромиссом со стороны обслуживания, но все еще очень удобный.

Первый класс (classA) хранит для каждого агента значение, отображаемое для каждого представления графического интерфейса. Итак, если я знаю текущего агента переднего плана (переменная состояния приложения), я могу получить доступ к map<agentId, classA> и получить значение для каждого представления. Аналогичным образом, когда получено новое значение, я просто сохраняю его в объекте classA связанного агента.

Второй класс (classB) отвечает за обновление каждого элемента графического интерфейса, поэтому:

  • Хранит ссылку на каждый объект вида графического интерфейса
  • Хранит ссылку на map<agentId, classA>
  • Для каждого элемента графического интерфейса у него есть метод для обновления, который принимает параметр agentId для доступа к нужному classA объекту, из которого извлекается правильное значение
  • Он имеет единственный метод updateAll, который вызывает каждый метод обновления (используется, когда требуется переключение агента)

Пример использования

При получении новых данных для агента я просто делаю следующее (псевдокод):

newBloodPressureValue(agentId, value) {
    [map<agentId, classA>].get(agentId).setBloodPressureValue(value)
    if (agentId is foregroundAgent)
        classB.updateBloodPressureField(agentId)
}

Преимущества дизайна:

  • Это позволило мне использовать один вид деятельности
  • Это позволило мне статически создать макет графического интерфейса через файл XML
  • Он легко поддерживает несколько агентов

Недостатки конструкции:

  • Если необходимо добавить элемент GUI, необходимо отредактировать три пункта: ссылку на classB членов, метод обновления, вызов метода обновления в updateAll метод

Комментарии, критика, предложения высоко ценятся.

0 голосов
/ 21 декабря 2011

Если вы не можете использовать несколько действий, вы все равно можете использовать ViewSwitcher, внутри него два экземпляра пользовательского макета и заполнить внеэкранный макет новыми значениями, а затем переключиться в режим просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...