即使未选中,首选项复选框也会保持为true

时间:2015-08-22 21:09:30

标签: java android sharedpreferences

我有一个偏好活动,我有一个PreferenceCheckBox。

我的偏好活动:

.highlight
{
background-color:yellow;}

我的复选框:

package com.tjs.balr;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class SettingsActivity extends PreferenceActivity{

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource( R.xml.preferences); 
    }   
}

在我的主要活动中,我尝试使用以下方式获取复选框的值:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Audio">
        <CheckBoxPreference
            android:id="@+id/checkSound"
            android:summary="Turn sounds on or off"
            android:defaultValue="true"
            android:title="Sounds"
            android:key="soundPref" 
        />
    </PreferenceCategory>
</PreferenceScreen>

很多人在stackoverflow上描述了private void showUserSettings() { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); musicPlaying = sharedPrefs.getBoolean("checkSound", true); if(musicPlaying){ Toast.makeText(this, "music is turned on", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, "music is turned off ", Toast.LENGTH_SHORT).show(); } } 作为获取复选框值的方法,但在我的情况下它仍然是正确的。主要是因为我说musicPlaying = sharedPrefs.getBoolean("checkSound", true);的默认值是真的。我忘记了什么来改变我的PreferenceCheckBox的价值?根据我对PreferenceActivity的理解,所有数据都会自动保存,这是正确的吗?

1 个答案:

答案 0 :(得分:2)

getBoolean(key, defaultValue)中,您需要传递而不是ID。

您总是true,因为他找不到CheckBox checkSound 作为键,因此它会返回默认值(true)。< / p>

要解决此问题,只需更改

即可

musicPlaying = sharedPrefs.getBoolean("checkSound", true);

musicPlaying = sharedPrefs.getBoolean("soundPref", true);