我需要看到getText(int resId)
方法的实现。此方法在抽象类Context.java
中定义为final,我在ContextWrapper.java
和ContextThemeWrapper.java
中搜索了实现,但我找不到任何实现。有人可以发布这个方法实现吗?我在netmite.com上查看了类的实现。感谢
答案 0 :(得分:3)
这是Context.java
中getText()
的实施。类是抽象的,但它实现了这种方法。
public final CharSequence getText(int resId) {
return getResources().getText(resId);
}
public CharSequence getText(int id) throws NotFoundException {
CharSequence res = mAssets.getResourceText(id);
if (res != null) {
return res;
}
throw new NotFoundException("String resource ID #0x"
+ Integer.toHexString(id));
}
AssetManager.getResourceText()
的实施:
final CharSequence getResourceText(int ident) {
synchronized (this) {
TypedValue tmpValue = mValue;
int block = loadResourceValue(ident, (short) 0, tmpValue, true);
if (block >= 0) {
if (tmpValue.type == TypedValue.TYPE_STRING) {
return mStringBlocks[block].get(tmpValue.data);
}
return tmpValue.coerceToString();
}
}
return null;
}
更新:正如@zapl loadResourceValue()
所提到的那样是原生的,可以在android_util_AssetManager.cpp
中找到。
答案 1 :(得分:0)
ICS - frameworks / base / core / java / android / content / res / AssetManager.java
/**
* Retrieve the string value associated with a particular resource
* identifier for the current configuration / skin.
*/
/*package*/ final CharSequence getResourceText(int ident) {
synchronized (this) {
TypedValue tmpValue = mValue;
int block = loadResourceValue(ident, (short) 0, tmpValue, true);
if (block >= 0) {
if (tmpValue.type == TypedValue.TYPE_STRING) {
return mStringBlocks[block].get(tmpValue.data);
}
return tmpValue.coerceToString();
}
}
return null;
}
loadResourceValue()
是本机的,在frameworks / base / core / jni / android_util_AssetManager.cpp中定义