我需要为动态创建的ListPreference设置默认值。它是动态创建的,因为它是对相机对焦模式的偏好,并且每个设备可以具有不同的对焦模式集。 listPreferenceFocusMode.setDefaultValue(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
不起作用,或者此链接中的How to set the Default Value of a ListPreference已接受的答案无效,而且它是'是不对的,因为它会覆盖用户的选择。
// Preview Focus Mode
int indexContinuous = 0;
if (focusModes != null && focusModes.size() > 0) {
entries = new String[focusModes.size()];
entryValues = new String[focusModes.size()];
for (int i = 0; i < focusModes.size(); i++) {
entryValues[i] = entries[i] = focusModes.get(i);
if (entryValues[i].equals(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
indexContinuous = i;
}
}
listPreferenceFocusMode.setEntries(entries);
listPreferenceFocusMode.setEntryValues(entryValues);
if (listPreferenceFocusMode.getValue() == null) {
listPreferenceFocusMode.setValueIndex(indexContinuous);
}
if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
listPreferenceFocusMode.setDefaultValue(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
} else {
listPreferenceFocusMode.setDefaultValue(Camera.Parameters.FOCUS_MODE_AUTO);
}
} else {
listPreferenceFocusMode.setEnabled(false);
listPreferenceFocusMode.setSummary("Focus Modes are not supported");
}
我尝试使用listPreferenceFocusMode.getValue()
设置defaultValue或获取值,但它也不起作用,因为listPreferenceFocusMode.getValue()
不是null
。提前谢谢。
答案 0 :(得分:0)
我使用布尔标志解决了它,检查它是否是应用程序的第一次启动。如果是,则设置listPreferenceFocusMode.setValueIndex(indexContinuous);
并设置为true并将isFirstStart标志保存到sharedPrefrerences以仅调用一次setValueIndex方法。如果listPrefrence
记住它的动态默认值会更好,但事实并非如此。