Android设置动态创建和填充的ListPrefrence的默认值

时间:2017-01-07 20:04:32

标签: android android-preferences listpreference

我需要为动态创建的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。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我使用布尔标志解决了它,检查它是否是应用程序的第一次启动。如果是,则设置listPreferenceFocusMode.setValueIndex(indexContinuous);并设置为true并将isFirstStart标志保存到sharedPrefrerences以仅调用一次setValueIndex方法。如果listPrefrence记住它的动态默认值会更好,但事实并非如此。