【问题标题】:setText(getString(R.strings.whatever) or setText(R.strings.whatever)?setText(getString(R.strings.whatever) 还是 setText(R.strings.whatever)?
【发布时间】:2017-08-24 17:42:21
【问题描述】:

两者都有效,显然如果您开始连接,则需要获取字符串以避免显示 int。

问题:使用哪个最“优雅”或“推荐”?

谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    第二种方法更优雅,因为在内部,TextView(或任何View-class)将完成为您指定的资源获取字符串的工作。

    让组件做内部工作总是首选。此外,它更短,更易读。


    关于我讲的内部原理:如果你看一下Androids source-code,你可以看到TextViewis implemented like thissetText(int)-方法:

    public final void setText(int resid) {
      setText(getContext().getResources().getText(resid));
    }
    

    因此,它在内部使用Context-class 从资源ID 中获取字符串。现在,如果您查看getText()-方法(也来自Context-class),您可以看到它是is implemented the same way

    public final String getString(int resId) {
      return getResources().getString(resId);
    }
    

    因此,出于性能或可靠性的原因,它没有任何区别。不过,它更短,更易读。

    【讨论】:

    • @Shamrflow 我用 Android 源代码中的一些代码更新了答案,以表明它的实现方式相同。看看吧。
    • 谢谢卢卡斯,更好。我注意到 AlertBuilder 中的 setTitle 和 setMessage 以及其他一些类也是如此。干杯!
    【解决方案2】:

    好吧,由于 API 提供了一种传递资源字符串 ID 的方法,因此更喜欢使用它似乎是合乎逻辑的。您实际上可以检查 setText(resourceid) 的工作情况以了解幕后情况,但绝对推荐使用 setText(R.strings.whatever)。

    【讨论】:

      【解决方案3】:

      你可以添加

      yourEditText.setText(getResources().getString(R.string.mytext));
      

      因为你需要在获取字符串之后获取资源上下文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-17
        相关资源
        最近更新 更多