在我的preferences.xml
中,我想存储某些字符串元素的ID(例如),例如...
<string-array name="preference_values">
<item>@string/nav_start</item>
<item>@string/nav_overview</item>
<item>@string/nav_someelse</item>
</string-array>
...同时在xml/pref_general.xml
...
<ListPreference
android:key="@string/preference_key"
android:entryValues="@array/preference_values"
... />
...不同的字符串将被本地化:
<string name="nav_start">Startbildschirm</string>
<string name="nav_overview">Übersicht</string>
<string name="nav_someelse">Sonstige</string>
由于我不想存储本地化的字符串(正如那些xml定义现在所做的那样),而是它们的整数键,我真的想知道是否有办法这样做。
这会使语言更改后的首选项仍然可用。
我真的希望能够访问/比较代码中的资源,这些资源不是拼写错误或名称更改(或者至少IDE检查/处理这些资源),例如:
switch( getMyPreferenceAsInt(R.string.preferenece_key) ) {
case R.string.nav_start: doSome(); break;
case R.string.nav_someelse: doSomeElse(); break;
...
}
我为NavigationDrawer
使用类似的东西,并发现它非常适合使用。这也是字符串值实际来自的地方(它就像一个&#34;默认的起始页面&#34;偏好)。
<string-array name="navigation_keys">
<item>@string/nav_start</item>
<item>@string/nav_overview</item>
<item>@string/nav_someelse</item>
...
</string-array>
但至少在这里我可以使用obtainTypedArray(...)
获取密钥:
void onCreate(Bundle savedInstanceState) {
...
mNavKeys = getResources().obtainTypedArray(R.array.navigation_keys);
}
void onNavigationDrawerItemSelected(int position) {
Fragment fragment;
int selectedResource = mNavKeys.getResourceId(position, R.string.nav_default);
if (selectedResource == R.string.nav_start) {
fragment = FancyStartFragment.newinstance();
}
else {
fragment = ...;
}
// Fancy methods to do a fragment transaction
...
}