2017-02-21 16 views
1

На MVP модели, у меня есть строка с динамическим значением%Использование строк из ресурса «R.String» на слое ведущий MVP

Пример:

<string name="hello">%s hello</string> 

и мне нужно установить этот текст с «моим именем «на моем текстовом представлении, как я сделаю эту ссылку witout прямо на R.String на моем уровне презентатора.

public void onItemClicked(String name) { 
     if (mainView != null) { 
      //HOW use R.string.hello from Strings here? [presenter layer] 
      mainView.showMessage(String.format("%s hello", name)); 
     } 
    } 

На MVP шаблона я не могу иметь какую-либо ссылка в Android-класс в ведущем слое, я не имею никакого контекста в этом классе, но мне нужно использовать R.string.hello, потому что перевод, как я могу взять эту witouth разрушает этот шаблон MVP

ответ

1

Быстрый ответ: вы не

Вы структурировать код так, что ваш метод мнение:

@Override 
public void showMessage(String name){ 

    if (mTextView != null){ 
     mTextView.setText(String.format(getString(R.string.hello), name)); 
    } 
} 

Тогда ваш код предъявитель:

public void onItemClicked(String name) { 
    if (mainView != null) { 
     mainView.showMessage(name); 
    } 
} 

MVP все о чистоте проверяемый код, в этом случае все, что вы хотите тестировать в своем презентаторе, заключается в том, что ведущий передает правильное имя в представление. Вам не нужно тестировать String.format() или получать строки из ресурсов (другие разработчики уже сделали это, то есть Android-разработчики Android). Я предлагаю, возможно, немного углубиться в то, почему MVP принесет пользу вашему проекту.

+0

Thx so much, и использование этой логики не может использовать в моем презентаторе что-то вроде showmessage (getview (R.id.text), текст), потому что у них есть R-класс? – rcorbellini

+1

Я никогда не пробовал этот подход, но он мог бы работать, но я бы не предложил его. Как только при модульном тестировании ваши модульные тесты не будут иметь никакого представления об этом классе R –

0

Существует перегруженная версия getString(), которая берет varargs для форматирования.

+0

В шаблоне MVP у меня нет ссылки на класс Android на уровне презентатора, у меня нет никакого контекста в этом классе, но мне нужно использовать R.string.hello , потому что переводите, как я могу принять этот witouth разрушает этот шаблон MVP – rcorbellini

+0

@rcorbellini У вас должен быть контекст для загрузки ресурса строки. Одна из возможностей - загрузить его в другое место и передать ведущему. Альтернативно создайте класс-оболочку, который может вызвать ведущий. Затем эта оболочка передает контекст. –

+0

Я знаю, что мне нужен контекст, чтобы получить строку из ресурса, но каковы варианты? Создайте класс «StringsHelper [с доступом к контексту]» и отправьте презентатору на конструкцию? но это косвенная зависимость (нет?), я могу использовать это без нарушения этого теста? – rcorbellini