android getText(int resId)实现

时间:2012-03-13 14:40:45

标签: android methods implementation

我需要看到getText(int resId)方法的实现。此方法在抽象类Context.java中定义为final,我在ContextWrapper.javaContextThemeWrapper.java中搜索了实现,但我找不到任何实现。有人可以发布这个方法实现吗?我在netmite.com上查看了类的实现。感谢

2 个答案:

答案 0 :(得分:3)

这是Context.javagetText()的实施。类是抽象的,但它实现了这种方法。

public final CharSequence getText(int resId) {
    return getResources().getText(resId);
}

Resources.getText()的实施:

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中定义