Как создать копию View чтобы уменьшить код?

198
20 марта 2017, 07:39
EditText editTextLeft = new EditText(this);
    editTextLeft.setHint("Название проекта");
    editTextLeft.setTextSize(12);
    editTextLeft.setSingleLine();
    editTextLeft.setImeOptions(EditorInfo.IME_ACTION_NEXT);
    editTextLeft.setHintTextColor(Color.GRAY);
    editTextLeft.setEnabled(false);
    EditText editTextRight = new EditText(this);
    editTextRight.setHint("Название обязанности");
    editTextRight.setTextSize(12);
    editTextRight.setSingleLine();
    editTextRight.setImeOptions(EditorInfo.IME_ACTION_DONE);
    editTextRight.setHintTextColor(Color.GRAY);
    editTextRight.setEnabled(false);

Если присмотреться, то 2 объекта класса EditText почти одинаковые. Можно ли как-то создать копию 2 из 1, а после уже исправить значения.

То-бишь уменьшить код.

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

EditText edittextRight=editextLeft не работает

Answer 1

Добавьте метод

EditText createEditText() {
    EditText editText = new EditText(this);
    editTextLeft.setHint("Название проекта");
    editTextLeft.setTextSize(12);
    editTextLeft.setSingleLine();
    editTextLeft.setImeOptions(EditorInfo.IME_ACTION_NEXT);
    editTextLeft.setHintTextColor(Color.GRAY);
    editTextLeft.setEnabled(false);
    return editText;
}

И потом им создайте нужные вам элементы.

EditText editTextLeft = createEditText();
EditText editTextRight = createEditText();

Рекомендую почитать о порождающих шаблонах проектирования.

Answer 2

Николай Конорев ответил правильно. Если вам нужно изменить какой-то из параметров, измените его после вызова метода создания EditText. Если этот параметр у всех разный, его стоит передавать параметром в метод createEditText().

В вашем случае можно передать меняющиеся параметры так:

EditText createEditText(String hint, int imeOptions) {
        EditText editText = new EditText(this);
        editText.setHint(hint);
        editText.setTextSize(12);
        editText.setSingleLine();
        editText.setImeOptions(imeOptions);
        editText.setHintTextColor(Color.GRAY);
        editText.setEnabled(false);
        return editText;
}

Затем использовать этот метод таким образом:

EditText editTextLeft = createEditText("Название проекта", EditorInfo.IME_ACTION_NEXT);
EditText editTextRight = createEditText("Название обязанности", EditorInfo.IME_ACTION_DONE);

После вызова этого метода, никто не мешает вам кастомизировать объект и дальше, например вы можете изменить параметры

editTextRight.setTextSize(17);

Или же установить новые

editTextRight.setText("");
READ ALSO
Регулярное выражение поиска тега html java

Регулярное выражение поиска тега html java

У меня есть значение атрибута href и мне надо найти весь тег с этим атрибутом на html;

209
Что делает буква “J” в JButton?

Что делает буква “J” в JButton?

Что делает буква "J" в javaxswing

268
В каждом методе объект BufferedReader Java

В каждом методе объект BufferedReader Java

В классе много методов, которые предполагают ввод данныхДля этого в каждом методе создаю объект:

207
Как верстать такого вида блоки? [дубликат]

Как верстать такого вида блоки? [дубликат]

На данный вопрос уже ответили:

247