Более простой способ установки значений в классе из пользовательского интерфейса

Часто существует сценарий, в котором есть ряд полей пользовательского интерфейса, которые необходимо скопировать в объекты модели. Например, в настоящее время я пишу страницу корзины, которая принимает информацию о кредитной карте в Activity, и мне нужно записать все введенные значения в объект CreditCard.

Я получаю блоки кода, которые выглядят следующим образом:

      CreditCard card  = new CreditCard();
      card.setFullName(txtFullName.getText().toString());
      card.setAddress(txtStreetAddress.getText().toString());
      card.setCity(txtCity.getText().toString());
      card.setState((String) spinnerState.getSelectedItem());
      card.setZip(txtZip.getText().toString());
      card.setPhone(txtPhone.getText().toString());
      card.setMonth(txtMonth.getText().toString());
      card.setYear(txtYear.getText().toString());
      card.setNumber(txtNum.getText().toString());
      card.setCvv(txtcvv.getText().toString());

Я пытался найти способ с помощью тегов пользовательского интерфейса в XML или другими способами упростить / автоматизировать этот процесс, но я не могу найти эффективное средство. Я что-то упускаю?

1 ответ

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

Одна вещь, которую вы можете сделать, чтобы сделать ваш код чище / более тестируемым, - это "вставить" поля, например, "txtFullName.getText(). ToString()", в конструктор CreditCard. Таким образом, у вас нет лишнего "установочного" кода, как в вашем примере. Однако при создании экземпляра объекта Credit Card у вас все равно будет блок кода:

CreditCard card = new CreditCard(arg1, arg2, arg3, arg4..etc)

Еще одна вещь, которую вы можете сделать, это использовать инфраструктуру внедрения зависимостей (DI), такую ​​как Dagger. Кинжал "вводит" поля для вас в модуле (модулях), который вы указываете для своего класса (классов), "за сценой".

http://square.github.io/dagger/

РЕДАКТИРОВАТЬ: ознакомьтесь с новой функцией привязки данных, выпущенной в Android Studio 1.3 (в настоящее время бета-версия)

Другие вопросы по тегам