Android 我的偏好不是';t';粘滞';

Android 我的偏好不是';t';粘滞';,android,Android,我正在尝试为我的应用程序创建一个设置部分。我有一个res/xml/settings.xml文件: <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <ListPreference android:key="numberOfYears" android

我正在尝试为我的应用程序创建一个设置部分。我有一个res/xml/settings.xml文件:

 <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
  <ListPreference 
    android:key="numberOfYears"
    android:title="Number of Years to Read the Bible"
    android:summary="How many years would you like to take to read through the reading plan?"
    android:entries="@array/numberOfYears"
    android:entryValues="@array/numberOfYears"
    android:dialogTitle="How Many Years?"
    />
  <CheckBoxPreference android:key="ignoreDates"
    android:title="Ignore Dates"
    android:summary="Would you like to use the dates in the plan?"
  />
</PreferenceScreen>
我不确定这是否是必需的,但我还将以下内容添加到我的主要活动中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(Menu.NONE, PREFS_MENU, Menu.NONE, "Preferences");
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Log.d(TAG, "Menu Item: " + item.getItemId());
    switch (item.getItemId()) {
    case PREFS_MENU :
        startActivity(new Intent(this, Preferences.class));
        return true;
    }
    return false;
}

这似乎是可行的,因为我得到了一个“首选项”菜单,当选择它时,启动我的首选项。然而,当我选择任何东西时,这些值似乎都不会保持不变。我的理解是,安卓:键足以让系统在默认共享首选项中设置所选的值——不是这样吗


我遗漏了什么?

不确定我是否正确地做到了这一点,我也希望能得到一些信息或其他最佳或更好的做法

我使我的PreferenceActivity类也实现了OnSharedPreferenceChangeListener,并使这些方法实现如下:

@Override
protected void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
    // TODO Auto-generated method stub
    Preference pref = findPreference(arg1);
    if (pref instanceof ListPreference) {
        ListPreference listPref = (ListPreference)pref;
        pref.setSummary(listPref.getEntry());
    }
    else {
        pref.setSummary(arg0.getString(arg1, pref.getSummary().toString()));
    }
}

“当我选择任何东西时,这些值似乎都不固定”——你对此的定义是什么?下面是一个有效的示例项目:如果我进入并设置首选项,按back,然后再次进入,则首选项将取消设置。这就是我不坚持的意思。不过我会看看你的项目。谢谢。有趣的是,如果我使用adb去查看共享首选项,那么这些值已经设置好了。那么,为什么在设置首选项时它们不显示?
@Override
protected void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
    // TODO Auto-generated method stub
    Preference pref = findPreference(arg1);
    if (pref instanceof ListPreference) {
        ListPreference listPref = (ListPreference)pref;
        pref.setSummary(listPref.getEntry());
    }
    else {
        pref.setSummary(arg0.getString(arg1, pref.getSummary().toString()));
    }
}