我想知道getString()。
我可以看到做getString(R.string.some_text)
有效。 getResources().getString(R.string.connection_error)
也有效。
所以我的问题是为什么我们应该使用getString或什么时候?
谢谢!
答案 0 :(得分:5)
这个问题很容易被误解。
如果您处于有效的上下文(如活动),则没有区别,因为上下文具有对资源的引用,因此它可以直接解析getString(int);
,返回一个String。
添加更多信息,让您高枕无忧。
如果您可以直接使用getString,请继续执行。现在有时您可能需要使用getResources(),因为它包含许多辅助方法。
这是getResources.getString()
的Android源代码:
/**
* Return the string value associated with a particular resource ID. It
* will be stripped of any styled text information.
* {@more}
*
* @param id The desired resource identifier, as generated by the aapt
* tool. This integer encodes the package, type, and resource
* entry. The value 0 is an invalid identifier.
*
* @throws NotFoundException Throws NotFoundException if the given ID does not exist.
*
* @return String The string data associated with the resource,
* stripped of styled text information.
*/
public String getString(int id) throws NotFoundException {
CharSequence res = getText(id);
if (res != null) {
return res.toString();
}
throw new NotFoundException("String resource ID #0x"
+ Integer.toHexString(id));
}
整洁吧? :)
事实是,Resources对象不仅仅是“获取字符串”,你可以看看here。
现在与getString()的活动版本进行比较:
从应用程序包的默认值返回本地化字符串 字符串表。
总而言之,除了Resources对象be stripped of any styled text information.
以及Resources对象可以更多之外,最终结果是相同的。 Activity版本是一个方便的快捷方式:)
答案 1 :(得分:2)
方法相同。从逻辑上讲,没有区别。你可以假设它确实如此:
public final String getString(int resId) {
return getResources().getString(resId);
}
我所知道的唯一区别是, getResources()可能需要将其他应用资源作为对象获取。 getString()将访问您自己的资源。
答案 2 :(得分:1)
如果将它用于TextView,则有两种方法setText()。一个接受(CharSequence字符串),另一个接受(int resId)。这就是你的两种变体都有效的原因。
通常我建议在strings.xml文件中定义所有字符串,并通过代码中的getResources()。getString(int resId)获取它们。采用这种方法,您将能够轻松本地化您的应用程序。您可以阅读有关应用资源here
的更多信息答案 3 :(得分:1)
非常基本的区别。
R.string.some_text = return ID integer, identifying string resource in your space
getResources().getString(R.string.connection_error) = Will return you actualy string associated with ID `R.string.connection_error`
它们都可以在Android系统中使用,其中许多小部件可以直接获取资源的id或值。实际上返回的值没有区别只有区别是Context
,你可以使用活动上下文,因此调用getString
直接路由到这个上下文的资源,而来自上下文不是的类从适配器可以说,你需要首先访问Context,然后是与上下文关联的资源,最后是String,这样你就可以编写getContext().getResources().getString(R.string.connection_error)
我希望它可以解除你的困惑。
答案 4 :(得分:0)