Android列表偏好落后一步

时间:2011-05-12 14:29:38

标签: android preferences listpreference

我的Android应用的偏好系统中有一个ListPreference,允许用户从最多5个不同帐户中的一个中选择一个数据。在偏好中,他们需要能够在他们希望当前使用的帐户之间切换。但问题是,当我点击其中一个选项时,我会在列表打开之前从中选择。代码如下:

    // Get the Account Preferences pointer
    final ListPreference accountPref = (ListPreference) findPreference("accountPref");
    CharSequence[] entries = { "Account 1", "Account 2", "Account 3", "Account 4", "Account 5" };
    CharSequence[] entryValues = { "1", "2", "3", "4", "5" };
    accountPref.setEntries(entries);
    accountPref.setEntryValues(entryValues);
    accountPref.setDefaultValue("1");

    accountPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            Log.i("theApp", "Selected = " + accountPref.getValue());
            return true;
        }

    });        

因此,如果我在对话框中选择第三个条目,则日志返回“1”。如果我然后选择第5个,则返回“3”。它似乎是在新选择之前返回选择。如何获取当前选项,而不是最后一个?

1 个答案:

答案 0 :(得分:2)

如果是这样,那是因为你正在阅读accountPref.getValue()。该值尚未提交,仅在onPreferenceChange()返回true后才会提交。相反,请使用newValue参数来阅读用户选择的内容。