如何在Android中为SwitchPreference设置默认值?

8

有人用过 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);

您可能需要更具体地说明您想要实现什么。而且,上面代码中的“switch”不是布尔值,因此不能设置为true或false。 - Carl-Emil Kjellstrand
3个回答

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 从 preferences.xml 设置值。
这就是为什么我把所有需要的值都改成了 XML。

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

我觉得我和你遇到了同样的问题,但是你的解决方案不是很清楚。那么你当时做了什么呢?我认为我的SwitchPreference没有读取我的共享首选项,如果我使用CheckBoxpreference一切都正常,但是对于SwitchPreference,每次我打开设置活动时它都被设置为false,而这甚至不是默认值! - acrespo
如果我有多个SwitchPreference怎么办?我认为它会将所有值都设置为true。 - Allen Vork
@Lidia 根据您的解释,我认为您是指 switchSplash.setChecked(true); 而不是 switchSplash.setChecked(false);,对吗? - Willi Mentzel

3

您可以在 <SwitchPreference /> 上使用 XML 属性 android:defaultValue="true",将默认值设置为 true。


1

如果您想从newValue中获取布尔值

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

你以一种奇怪而且我猜不正确的方式来处理这个问题。 如果newValue是一个布尔值(用instanceof检查),那么只需将newValue强制转换为布尔值即可。

        boolean selected =   (Boolean) newValue;

你想要实现这个吗?


@Lidia,为什么不发表你的解决方案呢? - Allen Vork

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接