【问题标题】:PreferenceActivity listpreference value resets to default on reloadPreferenceActivity listpreference 值在重新加载时重置为默认值
【发布时间】:2015-10-28 18:43:27
【问题描述】:

我的应用程序面临两个问题。

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

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

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

这是我的代码

设置活动:

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 变量, 当用户单击按钮打开包含微调器的警报对话框时,我会检索此变量以设置 secondActivity 中微调器的值。

请帮助我,提前谢谢。

【问题讨论】:

  • MainActivity mainActivity = new MainActivity(); 没有。你不能自己创建活动
  • 我正在创建我的主要活动的对象,因为变量 pref_default_currency_index 在 MainActivity 中声明,所以我只是创建该活动的对象来访问该变量以存储用户选择的 listPreference 值的索引。跨度>
  • 静止。你不能那样做。那是行不通的。 (但是,您提到它是一个静态变量?您的编辑应该对您以这种方式访问​​静态变量大喊大叫。)
  • 那我现在该怎么办?!!有什么建议?如果我删除静态关键字,我的变量在其他活动中再次变为空。

标签: android settings preferenceactivity listpreference


【解决方案1】:

我找到了解决我的两个问题的方法.. 当它很容易时,我把它变得太难了!!

我的第一个问题是从 PreferenceActivity 中取回从 listPreference 中选择的选项用户,我意识到,preferenceActivity 会自动将信息保存到 SharedPererences,所以我要做的就是在 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;
        }
    });  

就是这样,很简单!

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 2012-08-05
    • 2011-07-09
    • 2015-09-09
    • 2016-04-04
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多