我遇到了一个问题,我需要将从网站收到的一些密钥映射到我的Android应用程序中的图像ID。
我最初提出的解决方案是使用如下的switch语句:
switch (weather_type) {
case "cloudy":
return R.drawable.cloudy;
case "rainy":
return R.drawable.rainy;
// etc
}
这很好,效果很好,但我在想是否有办法将这些信息存储在XML中并在运行时可用。我在想像XML中的地图,它让我将名称映射到实际资源,但由于我还在学习android,我不确定如何去做这个。
我的计划包括在xml中创建string-array
以检索值。
<string-array name="icon_map">
<item>cloudy:@mipmap/cloudy</item>
<item>rainy:@mipmap/rain</item>
</string-array>
在Java中:
String []array = getResources().getStringArray(R.array.icon_map);
Log.i(TAG, array[0]);
结果
1798-1798/com.practice.smac89.webstuff I/MainActivity cloudy:@mipmap/cloudy
当我在Android Studio中输入此内容时,当我将鼠标悬停在资源上时,它显示的是实际图像。所以我希望当我在活动类中得到它时,它会被转换为实际的Id,但事实并非如此。
有没有办法在xml中存储映射,其中值是资源ID并获取java中的实际整数id? 我希望
1798-1798/com.practice.smac89.webstuff I/MainActivity cloudy:1231243
答案 0 :(得分:1)
TypedArray ar = context.getResources().obtainTypedArray(R.array.my_array);
int len = ar.length();
int[] resIds = new int[len];
for (int i = 0; i < len; i++)
resIds[i] = ar.getResourceId(i, 0);
ar.recycle();
// Do stuff with resolved reference array, resIds[]...
for (int i = 0; i < len; i++)
Log.v (TAG, "Res Id " + i + " is " + Integer.toHexString(resIds[i]));
答案 1 :(得分:0)
是的,我认为你可以通过同时使用字符串数组和整数数组得到你想要的东西,如下所示,在你定义两个数组的XML中。
<string-array name="name_array">
<item>cloudy</item>
<item>rainy</item>
</string-array>
<array name="icon_array">
<item>@mipmap/cloudy</item>
<item>@mipmap/rain</item>
</array>
在Java中,你可以做到
String [] nameArray = getResources().getStringArray(R.array.name_array);
int[] iconArray = getResources().getIntArray(R.array.icon_array);
for(int i=0; i<nameArray.length; i++){
if(nameArray[i].equals(weather_type)){
return iconArray[i])
}
}
这是我的字符串数组和可绘制数组的示例。
<string-array name="settings_titles">
<item>@string/TITLE_SERVICES</item>
<item>@string/TITLE_USERACCOUNTS</item>
<item>@string/TITLE_ABOUT</item>
</string-array>
<array name="settings_icons">
<item>@drawable/ic_android_services</item>
<item>@drawable/ic_android_users</item>
<item>@drawable/ic_android_about</item>
</array>
您还可以使用TypedArray来访问资源。像
final TypedArray mTitles = getResources().obtainTypedArray(titlesId);