PreferenceActivity listpreference值在重新加载时重置为默认值

时间:2015-08-05 20:04:00

标签: android settings preferenceactivity listpreference

我在我的应用中面临两个问题。

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

现在我的第一个问题是:每当我重新打开我的settingsActivity(preferenceActivity)时,listPreference的总和将重置为默认值,它仅在settingsActivity打开时显示所选值,当我返回mainActivity并再次打开settingsActivity时,summery listPreferece显示默认值(如果我打开值列表,它会显示最后选中的值)。

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

这是我的代码

settingsActivity:

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中声明的静态int变量, 当用户单击按钮打开包含微调器的alertdialoug时,我会检索此变量以在secondActivity中设置微调器的值。

请提前帮助我。

1 个答案:

答案 0 :(得分:0)

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

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

SharedPreferences sharedPrefs= PreferenceManager.getDefaultSharedPreferences(this);

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

第二个问题是每当我打开设置活动(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;
        }
    });  

就是这样,很容易!