如何在android中设置SwitchPreference的默认值?

时间:2012-09-25 13:10:33

标签: java android android-preferences

有没有人使用android的SwitchPreference类并且知道如何设置默认值?我已经以编程方式实现了它:

SwitchPreference switch = new SwitchPreference(this);
switch.setKey("preference_my_key");
switch.setTitle(R.string.preference_title_my_title);
switch.setSummary(R.string.preference_summary_my_summary);
Boolean isChecked = Manager.myMethodIsChecked(MyActivity.this);
switch.setChecked( isChecked ); 

switch.setOnPreferenceChangeListener(new OnPreferenceChangeListener()  {                
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
    try {
            boolean selected =   Boolean.parseBoolean(newValue.toString());      
        if ( !selected ) {
            //do something
        }
    } catch (Throwable e) {
       e.printStackTrace();
    }               
   return true;
   }
});         
category.addPreference(switch);

首选项将所有值保存到其xml文件中: app_package_name_preferences.xml
第一次加载应用时,开关默认为“ false ”值 但我有时需要将默认值设为“ true ” 我尝试了几种方法,但没有任何效果。

switch.setChecked( true );  
switch.setDefaultValue(true);

如果有人知道如何设置此默认值,请帮助我。 先感谢您 利迪娅

3 个答案:

答案 0 :(得分:6)

我找到了我的问题的解决方案,并会发布以防有人遇到同样的问题。

正如我所说,我以编程方式编写首选项

PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
PreferenceCategory catView = new PreferenceCategory(this);
catView.setTitle(R.string.preference_category_view);
root.addPreference(catView);

final SwitchPreference switchSplash= new SwitchPreference(this);
switchSplash.setKey(PreferenceKeys.SPLASH); 
//-----the above code----
switchSplash.setChecked(false);       //   LINE 1

catView.addPreference(switchSplash);  //   LINE 2

在调试中我发现 true 值在 LINE 1 中设置,但是当我将 switchSplash 添加到 catView 时>, switchSplash 的值重置为 false ,因为 catView 设置优先级xml的值。
这就是我将所有需要的值更改为xml

的原因
SharedPreferences.Editor editor = root.getPreferenceManager().getSharedPreferences().edit();
editor.putBoolean(PreferenceKeys.SPLASH, true);  
editor.commit();

就是这样。

答案 1 :(得分:0)

如果你试图从newValue中取出布尔值

        boolean selected =   Boolean.parseBoolean(newValue.toString());      

你是以一种奇怪的方式解决这个问题,我猜错了方法。 如果newValue是布尔值,(使用instanceof检查),则只需将newValue转换为布尔值。

        boolean selected =   (Boolean) newValue;

这是你想要实现的目标吗?

答案 2 :(得分:0)

如果有人仍在这里寻找答案,则可以使用此属性 app:defaultvalue="true" 在您的<Switchpreferencecompat/>中的xml