我试图解决以下问题:我在我的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微调器内容
答案 0 :(得分:1)
您可以使用public int getIdentifier (String name, String defType, String defPackage)
在运行时检索id。
name
是资源的名称。您在xml name
属性中指定的那个
defType
是资源的类型。例如。 drawable
。在您的情况下,您必须使用"array"
,因为您想要的资源是array
。defPackage
,是您应用的套餐名称。您可以使用getPackageName()检索它。 如果您想要检索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中执行上述操作。