2017-02-21 98 views
1

在MVP模式,我有串动态值%从资源上层演示使用字符串“R.String” 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模式,我不能有任何引用演示层一个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开发人员)。我建议也许读更深入了解为什么MVP会为您的项目带来好处

+0

Thx如此之多,并且使用该逻辑不能在我的演示者中使用类似showmessage(getview(R.id.text),text)的东西,因为R类是正确的吗? – rcorbellini

+1

我从来没有尝试过这种方法,但它可能工作,但我不会建议它。再次单元测试时,你的单元测试对R类没有任何理解 –

0

有一个getString()的重载版本,它采用可变参数进行格式设置。

+0

关于MVP模式,我无法在演示层中引用任何Android类,我没有这个类中的任何上下文,但是我需要使用R.string.hello ,因为翻译,我怎么可以采取这个witouth废墟这个MVP模式 – rcorbellini

+0

@rcorbellini你必须有一个上下文来加载字符串资源。一种可能性是将它加载到其他地方并传递给演示者。或者创建一个演示者可以调用的包装类。这个包装器然后委托给一个上下文。 –

+0

我知道我需要一个上下文从资源中获取字符串,但有什么选择?创建一个类“StringsHelper [with acess to context]”并发送给构造器上的演示者?但这是一种间接的依赖(否?)我可以使用这个没有打破这个模式? – rcorbellini