我的res / values / strings.xml
中有一个字符串数组 <string-array name="my_list">
<item>Item1</item>
<item>Item2</item>
</string-array>
我在我的应用程序中访问它并将其与循环中的值进行比较。
String[] myStrings = getResources().getStringArray(R.array.my_list);
for(int i=0;i<myStrings.length;i++)
{
System.out.println(myStrings[i]);
}
现在我需要根据键搜索项目以获取相应的项目。例如
<string-array name="my_list">
<item name="one">Item1</item>
<item name="two">Item2</item>
</string-array>
如果我的搜索干草键“一”,则获得其对应的值(Item1)。
如何完成此任务。
由于
答案 0 :(得分:17)
好吧,我已经使用两个数组完成了它。易于管理。
一把钥匙:
<string-array name="codes">
<item>AC</item>
<item>AD</item>
<item>AE</item>
</string-array>
一个值:
<string-array name="names">
<item>Ascension</item>
<item>Andorra</item>
<item>United Arab Emirates</item>
</string-array>
和搜索方法。
private String getCountryByCode(String code) {
int i = -1;
for (String cc: getResources().getStringArray(R.array.codes)) {
i++;
if (cc.equals(code))
break;
}
return getResources().getStringArray(R.array.names)[i];
}
答案 1 :(得分:9)
你有一个像数据结构的地图。遗憾的是,目前无法通过XML创建字符串映射。
您可以使用Java完成所有操作,也可以在Raw XML文件中编写地图,并在运行时将其读取/解析到地图中。
答案 2 :(得分:8)
不幸的是,没有内置的方法可以实现,但你可以这样做:
<string-array name="my_array">
<item>key1|value1</item>
<item>key2|value2</item>
</string-array>
并且有一个类似的函数:
Map<String, String> getKeyValueFromStringArray(Context ctx) {
String[] array = ctx.getResources().getStringArray(R.array.my_array);
Map<String, String> result = new HashMap<>();
for (String str : array) {
String[] splittedItem = str.split("|");
result.put(splittedItem[0], splittedItem[1])
}
return result
}
它看起来有点黑客,但总的来说,因为你可以控制你的字典 - 可能它不是那么糟糕。
答案 3 :(得分:2)
我遇到了同样的问题。 我的决定是在xml文件中创建许多字符串(不是字符串数组)并在代码中创建String []数组。它看起来像这样:
Builder builder = new AlertDialog.Builder(DMCBrowser.this);
builder.setTitle(R.string.title_playlist);
final CharSequence[] items = new CharSequence[] { getResources().getString(R.string.watch_all),
getResources().getString(R.string.select_items) };
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (items[which].equals(getResources().getString(R.string.watch_all))) {
Log.d(TAG, "Watch all");
} else if (items[which].equals(getResources().getString(R.string.select_items))) {
Log.d(TAG, "Select items");
}
}
}).show();
虽然它看起来不那么紧凑,但我们不仅可以通过不可理解的标识符(如1或2),而且通过人类可读的android R-id将一个项目与另一个项目区分开来。如果我想更改项目顺序,那将非常容易。
答案 4 :(得分:2)
执行此操作的一个好方法是使用XML创建一个数组数组,如下所示。然后使用本机函数可以很容易地获得所需命名索引的数组,并在其中获取字符串。
<string-array name="one">
<item>"Item 1"</item>
</string-array>
<string-array name="two">
<item>"Item 2"</item>
</string-array>
<array name="my_list">
<item>@array/one</item>
<item>@array/two</item>
</array>
答案 5 :(得分:2)
XML:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="area_key">
<item>北</item>
<item>中</item>
<item>南</item>
</string-array>
<integer-array name="area_value">
<item>0</item>
<item>1</item>
<item>2</item>
</integer-array>
</resources>
Java文件:
String[] areaKey = getResources().getStringArray(R.array.area_key);
int[] areaValue = getResources().getIntArray(R.array.area_value);
HashMap<String, Integer> areas = new HashMap<String, Integer>();
for (int i = 0; i < areaKey.length; i++) {
areas.put(areaKey[i], areaValue[i]);
}
答案 6 :(得分:0)
你可以在java代码中使用:
public static HashMap<Integer, String> getAll()
{
HashMap<Integer, String> items = new HashMap<Integer, String>();
items.put(0, "item 1");
items.put(1, "item 2");
items.put(2, "item 3");
return items;
}
public static Integer getKey(Map hm, String value) {
for (Object o : hm.keySet()) {
if (hm.get(o).equals(value)) {
return (Integer)o;
}
}
return 0;
}
并绑定到微调器:
Spinner spn_items = (Spinner) view.findViewById(R.id.spn_items);
ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(getActivity(),android.R.layout.simple_spinner_dropdown_item, getAll().values().toArray()); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn_items.setAdapter(adapter);
答案 7 :(得分:-1)
您可以使您的字符串数组的资源如下所示显示为hashmap类:
<string-array name="list_websites">
<item>
<string name="title">Amazon</string>
<string name="isChecked">0</string>
</item>
<item>
<string name="title">eBay</string>
<string name="isChecked">0</string>
</item>
<item>
<string name="title">Sam\'s Club</string>
<string name="isChecked">0</string>
</item>
<item>
<string name="title">Wallmart</string>
<string name="isChecked">0</string>
</item>
<item>
<string name="title">Best Buy</string>
<string name="isChecked">0</string>
</item>
<item>
<string name="title">Rekuten</string>
<string name="isChecked">0</string>
</item>
</string-array>
现在上面的代码可以解析为HashMap类型的ArrayList。