【问题标题】:How to set default value for SwitchPreference in Android?如何在 Android 中设置 SwitchPreference 的默认值?
【发布时间】:2021-03-31 15:35:47
【问题描述】:

是否有人使用过 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。

标签: java android android-preferences


【解决方案1】:

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

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中,但是当我在catView中添加switchSplash时,switchSplash的值被重置为false,因为catView 从preferences.xml 设置值。
这就是我将所有需要的值更改为 XML 的原因

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

【讨论】:

  • 我想我和你有同样的问题,但你的解决方案不是很清楚。你当时做了什么?我认为我的 switchPreference 没有读取我的共享首选项,如果我使用 CheckBoxpreference 一切正常,但使用 SwitchPreference,每次我打开我的设置活动时,它都设置为 false,这甚至不是默认值!
  • 如果我有多个 SwitchPreference 怎么办?我认为它会将所有值设置为 true。
  • @Lidia 按照您的解释,我认为您的意思是 switchSplash.setChecked(true); 而不是 switchSplash.setChecked(false); 对吧?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    你的做法很奇怪,我猜是不正确的。 如果 newValue 是布尔值,(使用 instanceof 检查)然后将 newValue 转换为布尔值。

            boolean selected =   (Boolean) newValue;
    

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

    【讨论】:

    • @Lidia 你为什么不发布你的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2011-12-31
    • 2010-11-14
    相关资源
    最近更新 更多