getResourceEntryName():我可以设法得到" R.id。+ getresourceentryname(R.string.myString)"?

时间:2015-10-16 09:59:55

标签: android arrays r.java-file getresource

我试图解决以下问题:我在我的xml字符串文件中命名了我的字符串资源:

 <string name="array_nature">Nature</string>
<string name="array_architecture">Architecture</string>
<string name="array_arts">Art/Literature</string>
<string name="array_cinema">Cinema/TV/Radio</string>
<string name="array_geography">Geographie</string>
<string name="array_leisure">Loisirs</string>
<string name="array_music">Musique</string>
<string name="array_people">People</string>
<string name="array_sciences">Sciences</string>
<string name="array_technology">Technologie</string>


<string-array name="array_category">
    <item>@string/array_nature</item>
    <item>@string/array_architecture</item>
    <item>@string/array_arts</item>
    <item>@string/array_cinema</item>
    <item>@string/array_geography</item>
    <item>@string/array_leisure</item>
    <item>@string/array_music</item>
    <item>@string/array_people</item>
    <item>@string/array_sciences</item>
    <item>@string/array_technology</item>
</string-array>

我也有与这两个字符串相对应的字符串数组:

<string-array name="array_nature">
        <item>Species</item>
        <item>Plant</item>
        <item>Animal</item>
        <item>CelestialBody</item>
        <item>Asteroid</item>
        <item>Galaxy</item>
        <item>Planet</item>
        <item>Satellite</item>
        <item>Star</item>
    </string-array>

<string-array name="array_architecture">
        <item>AmusementParkAttraction</item>
        <item>Building</item>
        <item>MilitaryStructure</item>
        <item>Infrastructure</item>
        <item>Airport</item>
        <item>RouteOfTransportation</item>
        <item>Bridge</item>
        <item>HistoricPlace</item>
        <item>Monument</item>
        <item>Park</item>
        <item>Zoo</item>
    </string-array>

如您所见,我的字符串的属性名称(name =&#34; array_nature&#34;)与字符串数组名称完全相同。

我的目标是在我的活动中避免烦人的if if else if else if代码......那么在我的java代码中是否有可能获得类似的内容?

int myStringArray = R.id.+getResourceEntryName(R.string.array_nature);

我坚持这个方法

public void getchoicearray() {

        Spinner sp = ((Spinner)findViewById(R.id.spinner_category));
        int id = getResources().getIdentifier(getResources().getResourceEntryName(sp.getSelectedItem()./*how to get the entry
        name of selected spinner item*/), "array", getPackageName());

        choiceArray = id;

ArrayAdapter a = ArrayAdapter.createFromResource(this, choiceArray, android.R.layout.simple_spinner_item);
        ((Spinner) findViewById(R.id.spinner_choice)).setAdapter(a);

}

或与微调器选择相对应的任何其他值...

编辑:添加了xml微调器内容

2 个答案:

答案 0 :(得分:1)

您可以使用public int getIdentifier (String name, String defType, String defPackage)在运行时检索id。

  1. name是资源的名称。您在xml
  2. name属性中指定的那个
  3. defType是资源的类型。例如。 drawable。在您的情况下,您必须使用"array",因为您想要的资源是array
  4. defPackage,是您应用的套餐名称。您可以使用getPackageName()检索它。
  5. 如果您想要检索id的{​​{1}},您将拥有:

    array_nature

    int myStringArray = getResources().getIdentifier("array_nature", "array", getPackageName()) 返回0,无法找到资源。所以你应该总是检查返回值是否大于0

答案 1 :(得分:0)

Resources res = getResources();
String[] planets = res.getStringArray(R.array.array_nature);

在strings.xml中执行上述操作。