Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从值获取资源ID_Android_Resources - Fatal编程技术网

Android 从值获取资源ID

Android 从值获取资源ID,android,resources,Android,Resources,我有很多特定语言的资源。在我的Android应用程序中,有一点我确实获得了一个资源值,需要将该值转换为匹配的id。该值不一定在当前语言的特定语言文件中(en/de/…)。就在那里的某个地方。。。这是独一无二的 在阅读文档和这个线程“”之后,我认为getIdentifier(String name、String defType、String defPackage)是正确的方法,但我无法让它工作。结果总是“0” 这段代码是活动的一部分,我在安卓2.2上 Android有没有可能不考虑所有资源文件,只

我有很多特定语言的资源。在我的Android应用程序中,有一点我确实获得了一个资源值,需要将该值转换为匹配的id。该值不一定在当前语言的特定语言文件中(en/de/…)。就在那里的某个地方。。。这是独一无二的

在阅读文档和这个线程“”之后,我认为
getIdentifier(String name、String defType、String defPackage)
是正确的方法,但我无法让它工作。结果总是“0”

这段代码是活动的一部分,我在安卓2.2上

Android有没有可能不考虑所有资源文件,只使用当前特定语言的文件进行搜索

例如(当前语言为“de”):

File:values en/strings.xml
第一段文字
第二个文本
文件:values de/strings.xml
艾因·厄斯特文本
Ein zweiter文本
//现在我想找到这个“en”文本的ID。。。
String testValue=“第二个文本”;
int i=this.getResources().getIdentifier(testValue,“strings”,this.getPackageName());
// ... 并将其翻译成实际的“de”语言
String translatedValue=this.getResources().getString(i);
把事情弄清楚。我不想错过将字符串资源用作数据库的机会。这只是在非常罕见的情况下发生的一部分。

您使用的getIdentifier错误。您不指定文本,而是指定文本的标识符,在您的情况下,该标识符将是txt\u affirsttext或txt\u asecondtext

我认为无法通过内容来定位字符串资源标识符。这就像传递一个字节流来定位一个可绘制文件

您的应用程序真的需要这种奇怪的获取资源的方式吗?我确信您可以使用更好的方法动态加载资源,尽管您的第一段将您的场景描述为一个神秘的场景:)


编辑:答案已修复。感谢tdroza的更正。

对上述代码示例的一个次要但重要的更正:资源类型必须是单数而不是复数。i、 e.“字符串”而不是“字符串”-同样适用于可绘制、id、数组等

例如


谢谢你的回答。似乎我需要为所有特定于语言的字符串添加一个表。哎呀,对不起,我太快了。问题是,我确实在一个特殊的部分获得了外部数据。这些传输的数据没有键,只是10种语言之一的值。我甚至不懂这门语言。这只是我得到的价值。我确实有一个可能值和附加键的列表。由于UI也需要这些值,因此它们是各种“values xx”目录的一部分。我的想法是为数千个文本对保存第二个数据存储,并查找资源中的值。好吧,坏主意。我要另一张桌子。谢谢您的帮助。您是否找到了比使用表格更合适的解决方案?(完全可以替换内置的android字符串本地化)资源类型应该是单数的说法并非在所有情况下都是正确的。搜索复数资源时,请确保使用“复数”作为资源类型。这花费了我相当长的时间去发现;)
File: values-en/strings.xml
<resources>
   <string name="txt_afirsttext">A first text</string>
   <string name="txt_asecondtext">A second text</string>
</resources>

File: values-de/strings.xml
<resources>
   <string name="txt_afirsttext">Ein erster Text</string>
   <string name="txt_asecondtext">Ein zweiter Text</string>
</resources>

// Now I want to find the ID to this "en" text ...
String testValue = "A second text";
int i = this.getResources().getIdentifier(testValue, "strings", this.getPackageName());

// ... and translate it to the actual "de" language
String translatedValue = this.getResources().getString(i);
int i = this.getResources().
             getIdentifier("txt_asecondtext", "string", this.getPackageName());
int i = this.getResources().getIdentifier(testValue, "string", this.getPackageName());