我想知道更好的方法來提高我的程序的性能。目標是自動加載資源,我使用字符串或字符串數組元素的名稱。舉例來說,如果我有下一個資源:自動獲取資源 - Android
<string name="temperature">temperature</string>
<string name="pressure">pressure</string>
<string name="velocity">velocity</string>
...
<string-array name="measures">
<item>@string/temperature</item>
<item>@string/pressure</item>
<item>@string/velocity</item>
...
</string-array>
<string name="name_temperature">Temperature</string>
<string name="name_pressure">Pressure</string>
<string name="name_velocity">Velocity</string>
...
<string-array
name="name_measures">
<item>@string/name_temperature</item>
<item>@string/name_pressure</item>
<item>@string/name_velocity</item>
...
</string-array>
<string-array name="units_temperature">
<item>K</item>
<item>°C</item>
<item>°F</item>
<item>R</item>
</string-array>
我加載資源,這種方式:
measuresMap = new HashMap<String, String>();
String[] measures = getResources().getStringArray(R.array.measures);
for(int i = 0; i < measures.length; i++){
measuresMap.put(measures[i], getResources().getString(getResources().getIdentifier("name_" + measures[i], "string", getActivity().getPackageName())).toString());
}
即我是從「措施」,以將其映射的字符串數組值是相應的字符串'name_ <>'。
我使用微調來選擇度量,例如,「溫度」:
measureSpinner = (Spinner) view.findViewById(R.id.spinnerConverter);
setSpinner(measureSpinner, R.array.name_measures, android.R.layout.simple_spinner_item, android.R.layout.simple_spinner_dropdown_item);
當選擇的項目中,一種方法檢索來自地圖視的項的字符串中的關鍵微調(getKeyByValueFromMap從here):
String[] units = getResources().getStringArray(getResources().getIdentifier("units_" + getKeyByValueFromMap(measuresMap, measureSpinner.getSelectedItem().toString()), "array", getActivity().getPackageName()));
public <T, E> T getKeyByValueFromMap(Map<T, E> map, E value) {
for (Map.Entry<T, E> entry : map.entrySet()) {
if (value.equals(entry.getValue())) {
return entry.getKey();
}
}
return null;
}
我需要這樣做來填充NumberPicker:
String[] units = getResources().getStringArray(getResources().getIdentifier("units_" + getKeyByValueFromMap(measuresMap, measureSpinner.getSelectedItem().toString()), "array", getActivity().getPackageName()));
我認爲這在某種程度上是低效的。我讀了一些關於使用TypedArray加載數組的內容。我想到了一個多維的String數組。目標是相同的:自動加載資源(由for循環驅動以填充Map)。 HashMap是最佳選擇嗎?
<string name="@string/temp">Temperature</string>