在图层演示者MVP上使用来自资源“R.String”的字符串

时间:2017-02-21 22:50:21

标签: android mvp presenter

在MVP模式上,我有动态值%

的字符串

示例:

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

并且我需要在我的textview上将此文本设置为“我的名字”,我将如何在我的演示者图层上直接显示一个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模式上,我无法在presenter层中引用任何Android类,我在这个类中没有任何上下文,但是我需要使用R.string.hello,因为翻译,我怎么能把这个看起来破坏这个MVP模式

2 个答案:

答案 0 :(得分:2)

快速回答:你没有

您构建代码,以便查看方法:

@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开发人员)。我建议可能会更深入地了解为什么MVP会使您的项目受益

答案 1 :(得分:0)

getString()的重载版本需要varargs进行格式化。