7

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

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);
4

3 回答 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();
于 2012-09-26T14:49:33.310 回答
2

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

于 2020-05-11T11:03:07.063 回答
1

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

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

你以一种奇怪的方式去做这件事,我猜是不正确的。如果 newValue 是一个布尔值,(使用 instanceof 检查)那么只需将 newValue 转换为一个布尔值。

        boolean selected =   (Boolean) newValue;

这就是你想要达到的目标吗?

于 2012-09-25T16:35:13.937 回答