Как укоротить инициализацию большого экрана, заполненного контролами?

Рейтинг: 0Ответов: 1Опубликовано: 18.11.2014

Возможно, во многих проектах вы сталкивались с проблемой, когда нужно инициализировать большой экран, заполненный контролами.

Вот, например, как тут:

/**
 * show history monthly
 */
private void initHMonthly() {
    TextView bankProductHistoryPeriod = (TextView) activity.findViewById(bankproductHistoryPeriod);
    bankProductHistoryPeriod.setBackgroundColor(getResources().getColor(white));
    bankProductHistoryPeriod.setTextColor(getResources().getColor(bankproduct_type_text));
    showMonthPicker(true, false);
    
     TextView bankProductHistoryPeriod = (TextView) activity.findViewById(bankproductHistoryPeriod);
    bankProductHistoryPeriod.setBackgroundColor(getResources().getColor(white));
    bankProductHistoryPeriod.setTextColor(getResources().getColor(bankproduct_type_text));
    showMonthPicker(true, false);
    
     TextView bankProductHistoryPeriod = (TextView) activity.findViewById(bankproductHistoryPeriod);
    bankProductHistoryPeriod.setBackgroundColor(getResources().getColor(white));
    bankProductHistoryPeriod.setTextColor(getResources().getColor(bankproduct_type_text));
    showMonthPicker(true, false);
}

И таких методов строк на 100+. Есть ли пути для уменьшения объема такого кода? Кроме Android Annotations.

Ответы

▲ 3Принят

В свое время столкнулся с подобной проблемой. Решается просто - вынесением однотипного кода в методы.

Вот, к примеру, вижу кучу методов, которые выставляют белый цвет. Значит, нужно сделать отдельный метод для установки цвета, чтобы он вызывался где-то так:

setBgColor(bankProductHistoryPeriod, white);

В результате код станет сильно меньше. А дальше возможно даже сделать метод

setWhiteBg(bankProductHistoryPeriod);

Но он немного плох, потому как задает цвет прямо в имени, хотя в некоторых случаях может быть полезным.

Дальше есть много вот такого кода:

TextView bankProductHistoryPeriod = (TextView) activity.findViewById(bankproductHistoryPeriod);

Значит, нужен метод, который будет короче и вызывался где-то так:

TextView bankProductHistoryPeriod = findTextById(bankproductHistoryPeriod);

Через некоторое время Ваш код инициализации превратиться просто в список:

initTextView(bankProductHistoryPeriod);
initButtonSubmit(btnSubmit);

А сами методы инициализации выйдут в отдельный класс.