首页>Program>source

我使用Resources.getIdentifier动态加载字符串资源; 因为我动态地传递了一个需要从我的资源文件中转换的字符串.资源不存在时返回0;否则返回0.所以我处理.但是,当我传入一个数字字符串时; 即使我没有在资源中定义该资源,它也会返回我传入的数字而不是0。这在尝试获取该资源时会导致崩溃。

int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
    text2.setVisibility(View.VISIBLE);
    text2.setText(context.getResources().getString(identifier));
} else {
    text2.setVisibility(View.GONE);
}

这是定义的行为吗? 我无法想象为什么当myText为" BLAH"时它可以正常工作,但是当myText为" 12"时,它却不同.我唯一想到的就是首先测试myText是否为数字; 尽管我能找到的唯一方法是尝试将其解析为整数并捕获numberFormatException.那是最好的解决方案吗?

最新回答
  • 1月前
    1 #

    这有点奇怪,但是如果我像getIdentifier()文档中所指定的那样指定完全限定的名称,它将正常工作,否则我将得到与您相同的结果。

    >

    getIdentifier("com.farragut.android.emsspeak:string/"+myText, null, null);一起尝试

  • 1月前
    2 #

    字符串资源只能包含字符串,不能包含特殊字符,不能包含字母作为标记名。

    example

    <string name="mydata">Suuuuu</string>   有效

    <string name="45645">Suuuuu</string>    无效

    so first check whether your text is valid or not

    使用以下代码使其为您工作

    Code

    boolean isValid = (Pattern.matches("[a-zA-Z]+", myText))
    if(isValid){
    int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
    if (identifier > 0) {
        text2.setVisibility(View.VISIBLE);
        text2.setText(context.getResources().getString(identifier));
    } else {
        text2.setVisibility(View.GONE);
    }
    }
    

    谢谢 迪帕克(Deepak)

  • 1月前
    3 #

    我正在头以完成这项工作:

    int imgId = getResources().getIdentifier("moviedetails" + movieId , "drawable", getPackageName());
    imageview.setImageResource(imgId);
    

    对我来说很好用.只需要: "Project -->Clean"

  • entity framework:wPF克隆/分离对象编辑问题-标准是什么?
  • git branch:主节点和分支节点上的git status