2015-08-22 35 views
0

我有一個首選活動,其中有一個PreferenceCheckBox。即使未選中,首選項複選框也會保持爲真

我的偏好活動:

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> 

在我的主要活動我嘗試使用讓我的複選框的值:

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

了很多這裏的人在stackoverflow描述musicPlaying = sharedPrefs.getBoolean("checkSound", true);作爲獲取複選框的值的方式,但我ñ我的情況下,它保持真實。主要是因爲我說默認值checkSound是真的。我爲了改變PreferenceCheckBox的價值而忘記了一些東西?根據我對PreferenceActivity的理解,所有數據都會自動保存,這是正確的嗎?

回答

2

getBoolean(key, defaultValue),你需要通過密鑰不是id。

,因爲他不找你總是得到trueCheckBoxcheckSound關鍵,因此返回(在你的情況true)的默認值。

爲了解決這個問題,只是改變

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

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

+0

哇,甚至從不看我的鑰匙或ID。我很抱歉我的sl :(:( – Tomjesch

相關問題