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

Java 如何在Android中设置SwitchPreference的默认值?,java,android,android-preferences,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_summ

是否有人使用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);
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
首选项将所有值保存到其XML文件中:
app\u package\u name\u Preferences.XML
。首次加载应用程序时,开关具有默认值“false”。但有时我需要将默认值“设置为true”。我尝试了几种方法,但都不管用

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

如果您试图从newValue中获取布尔值

        boolean selected =   Boolean.parseBoolean(newValue.toString());      
你这样做很奇怪,我猜是不正确的。 如果newValue是一个布尔值,(使用instanceof检查),那么只需将newValue强制转换为布尔值

        boolean selected =   (Boolean) newValue;

这就是您试图实现的目标吗?

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

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);
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
调试时,我发现第1行设置了
true
值,但当我将
switchSplash
添加到
catView
中时,
switchSplash
的值被重置为
false
,因为
catView
从preferences.xml设置值。
这就是为什么我将所有需要的值都更改为XML

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

您可以在
上使用XML属性
android:defaultValue=“true”
将默认值设置为true。

您可能希望更具体地了解您想要实现的目标。上面代码中的“switch”不是布尔值,因此不能设置为true或false。我想我和你有同样的问题,但你的解决方案不是很清楚。然后你做了什么?我认为我的switchPreference不是读取我的共享首选项,如果我使用CheckBoxpreference,一切都很好,但是使用switchPreference,每次我打开设置活动时,它都被设置为false,这甚至不是默认值!如果我有多重选择怎么办?我想它会把所有的值都设置为真。@Lidia按照你的解释,我想你的意思是
switchSplash.setChecked(真)和非
开关飞溅。设置检查(假)对吗?@Lidia你为什么不发布你的解决方案