7

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

デバッグ中に、値がLINE 1trueに設定されていることがわかりましたが、に追加すると、preferences.xmlから値を設定するため、の値はにリセットされます。 そのため、必要なすべての値をXMLに変更しましたswitchSplashcatViewswitchSplashfalsecatView

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 に答える