我的偏好不是'坚持'

时间:2010-09-16 08:06:23

标签: 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>

我有一个名为Preferences的类,它扩展了PreferenceActivity并包含以下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
}

我不确定这是否是必需的,但我还在主要活动中添加了以下内容:

@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;
}

这似乎有效,我得到一个“首选项”菜单,选中后会启动我的首选项。但是,当我选择任何值时,值似乎并不坚持。我的理解是android:key足以让系统在默认的共享首选项中设置所选的值 - 这不是这种情况吗?

我错过了什么?

1 个答案:

答案 0 :(得分:0)

不确定我是否正确地做了这件事,我也希望得到投入或其他最佳或更好的做法。

我使我的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()));
    }
}