我在我的应用中面临两个问题。
在我的应用程序中,我使用包含应用程序的简单设置的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中设置微调器的值。
请提前帮助我。
答案 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;
}
});
就是这样,很容易!