PreferenceActivity 列表首选项值在重新加载时重置为默认值

PreferenceActivity listpreference value resets to default on reload

我的应用程序遇到了两个问题。

在我的应用程序中,我使用包含应用程序简单设置(checkboxpreference 和 listpreference)的 preferenceActivity,我有三个活动 mainActivity、secondActivity 和 settingsActivity,它是 prefrenceActivity,在 secondActivity 中,我展示了一个表单,让用户选择一个来自微调器视图的值,我想做的是用户可以 select 来自 settingsActivity 的微调器的默认值,这样用户就不必每次都手动 select 微调器的值。

现在我的第一个问题是:每当我重新打开我的 settingsActivity(preferenceActivity) 时,listPreference 的摘要将重置为默认值,它只显示 selected 值,而 settingsActivity 打开时,当我返回 mainActivity 和我再次打开 settingsActivity,listPreferece 的摘要显示默认值(如果我打开值列表,它显示最后检查的 selected 值)。

第二个问题是:每当我关闭应用程序并再次打开时,首选项值就会被破坏,这意味着 secondActivity 显示用户 selected 默认值,而不是它显示微调器的第一个值。

这是我的代码

设置活动:

public class settingsActivity extends PreferenceActivity 

{ MainActivity mainActivity = new MainActivity();

ListPreference listpref;
@Override
public void onCreate(Bundle savedInstenceState)
{
    super.onCreate(savedInstenceState);
    addPreferencesFromResource(R.xml.settings);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    listpref = (ListPreference)findPreference("prefDefaultCurrency");
    listpref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() 
    {           
        @Override
        public boolean onPreferenceChange(Preference preference, Object value) {
            // TODO Auto-generated method stub
            listpref.setSummary(value.toString());
            mainActivity.pref_default_currency_index = listpref.findIndexOfValue(value.toString());
            return true;
        }
    });
    CharSequence curenttext = listpref.getEntry();
    mainActivity.pref_default_currency_index = listpref.findIndexOfValue(curenttext.toString());

}

pref_default_currency_index是在mainActivity中声明的static int变量, 当用户单击按钮打开包含微调器的警报对话框时,我检索此变量以设置 secondActivity 中微调器的值。

请帮助我,在此先感谢。

我找到了解决我的两个问题的方法..当它变得非常简单时,我却把它变得太难了!!

我的第一个问题是取回用户从 PreferenceActivity 的 listPreference 中选择的选项,我意识到 preferenceActivity 会自动将信息保存到 SharedPreerences,所以我要做的就是在 onCreate() 方法中检索该信息并将其保存在局部变量。

SharedPreferences sharedPrefs= PreferenceManager.getDefaultSharedPreferences(this);

pref_default_currency_index = Integer.parseInt(sharedPrefs.getString("prefDefaultCurrency","0"));

第二个问题是,每当我打开设置 activity (preferenceActivity) 时,listPreference 的摘要没有显示最后选择的值,为了解决这个问题,我只需要在 setOnPreferenceChangeListener() 方法中设置 listPreference 的摘要

listpref = (ListPreference)findPreference("prefDefaultCurrency");
    listpref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() 
    {           
        @Override
        public boolean onPreferenceChange(Preference preference, Object value) {
            // TODO Auto-generated method stub
            listpref.setSummary(value.toString());
            return true;
        }
    });  

就是这样,很简单!