我有一个偏好活动,我有一个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的理解,所有数据都会自动保存,这是正确的吗?
答案 0 :(得分:2)
在getBoolean(key, defaultValue)
中,您需要传递键而不是ID。
您总是true
,因为他找不到CheckBox
checkSound 作为键,因此它会返回默认值(true
)。< / p>
要解决此问题,只需更改
即可 musicPlaying = sharedPrefs.getBoolean("checkSound", true);
到
musicPlaying = sharedPrefs.getBoolean("soundPref", true);