在string数组android中search键的值

我的res / values / strings.xml中有一个string数组

<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]); } 

现在我需要按照关键字search项目来获取相应的项目

 <string-array name="my_list"> <item name="one">Item1</item> <item name="two">Item2</item> </string-array> 

如果我的search干草关键“一”,然后得到其相应的价值(Item1)。

如何完成这个任务。

谢谢

Solutions Collecting From Web of "在string数组android中search键的值"

你在那里有一个像数据结构的地图。 可悲的是,目前没有办法像这样通过XML创build一个string的地图。

您可以使用Java来完成所有工作,也可以使用原始XML文件编写您的地图,并在运行时读取/parsing地图。

那么,我已经做了两个数组。 易于pipe理。

一个键:

 <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> 

和search方法。

 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]; } 

不幸的是,没有内置的方式来实现,但你可以做这样的事情:

  <string-array name="my_array"> <item>key1|value1</item> <item>key2|value2</item> </string-array> 

并有一个utilfunction,如:

 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 } 

这看起来有点冒险,但总的来说,因为你可以控制你的字典 – 可能不是那么可怕的想法。

一个很好的方法是使用XML来创build一个数组的数组,如下所示。 然后本地函数使得使用所需的索引获取数组非常容易,并获取其中的string。

 <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> 

我有同样的问题。 我的决定是在xml文件(而不是string数组)中创build许多string,并在代码中创buildString []数组。 它看起来像这样:

  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来区分不同的项目。 如果我想改变项目顺序,这将是非常容易的。

你可以像下面那样使你的string数组的资源显示为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> 

现在上面的代码可以被parsing为HashMap类的ArrayList类。