我该如何解决?一旦我从ListPreference中的项目列表中选择了一个项目,我就会收到如下错误。
AndroidRuntime:FATAL EXCEPTION:主要 过程:com.mobilaris.eunomia.client,PID:2998 java.lang.IllegalStateException:ListPreference需要一个条目 数组和entryValues数组。
代码如下。 SettingsActivity.java下的类
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_map_layers);
setHasOptionsMenu(true);
mapMessagesHandler.getMapLayers();
final ListPreference listPreference = (ListPreference) findPreference("maps_list");
if(listPreference != null) {
HashMap<Integer, String> mapsList = MapManager.getMaps();
for(final int value : mapsList.keySet()) {
listPreference.setSummary(mapsList.get(value));
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
MapManager.setSelectedMapInstance(value);
preference.setSummary(listPreference.getEntry().toString());
return true;
}
});
}
} else {
logger.error("No map to select");
}
}
XML如下。
<PreferenceCategory>
<ListPreference android:key="maps_list"
android:defaultValue="3" />
</PreferenceCategory>
</PreferenceScreen>
答案 0 :(得分:0)
您需要提供数组作为错误状态:“ListPreference需要条目数组和entryValues数组。
添加arrays.xml
<resources>
<string-array name="entries_array">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</string-array>
<string-array name="entries_values_array">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</string-array>
</resources>
引用ListPreferences
中的数组<ListPreference android:key="maps_list"
android:entries="@array/entries_array"
android:entryValues="@array/entries_values_array"
android:defaultValue="3" />
从mapsList:
加载数组的示例if(listPreference != null) {
HashMap<Integer, String> mapsList = MapManager.getMaps();
String[] entries = new String[mapsList.size()];
String[] entryValues = new String[mapsList.size()];
Iterator<Map.Entry<Integer, String>> iter = mapsList.entrySet().iterator();
int i = 0;
while(iter.hasNext()) {
Map.Entry<Integer, String> mapping = iter.next();
entries[i] = mapping.getKey().toString();
entryValues[i] = mapping.getValue().toString();
i++;
}
listPreference.setEntries(entries);
listPreference.setEntryValues(entryValues);
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
MapManager.setSelectedMapInstance(value);
preference.setSummary(listPreference.getEntry().toString());
return true;
}
});
}
} else {
logger.error("No map to select");
}