onSharedPreferenceChanged而不使用getDefaultSharedPreferences

时间:2012-11-08 10:08:09

标签: android android-preferences

我正在使用context.getSharedPreference而不是getDefaultSharedPreferences。 意思是:

SharedPreferences checkboxSetting = context.getSharedPreferences(
                                         "myPreferenceDB", Context.MODE_PRIVATE);
boolean flag = checkboxSetting.getBoolean("checkboxKey",true);

和preference.xml:

<CheckBoxPreference 
        android:key="checkBoxPrefff"
        android:title="@string/title"
        android:defaultValue="true"/>

应用程序设置有一个复选框首选项,我想获取,检查或未检查的值。

这会有用吗?

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                                                                      String key) {
    if (key.equalsIgnoreCase("checkBoxPrefff")) { 
         sharedPreferences.getBoolean(key,true);
    }
 }

sharedPreferences是使用默认数据库(..._preference.xml)还是我定义的数据库(“myPreferenceDB”)? key是“checkboxKey”还是null?

因为当我想获得像

这样的价值时
SharedPreferences temp = context.getSharedPreferences(
                                         "myPreferenceDB", Context.MODE_PRIVATE);
boolean flag = temp.getBoolean("checkboxKey",true);

这是错误的并且返回defValue(true)。但是当使用像

SharedPreferences temp = PreferenceManager.getDefaultSharedPreferences(context);
boolean flag = temp.getBoolean("checkboxKey",true);

它有效。

2 个答案:

答案 0 :(得分:1)

您可以在您使用的任何共享首页上注册SharedPreferenceChangedListener。它不必是默认的共享首选项。

getApplicationContext().getSharedPreferences("myPreferenceDB", 0).registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                String key) {
            // TODO Auto-generated method stub

        }
    });

答案 1 :(得分:1)

我再次提到sharedPref不是数据库而是XML文件。我希望您正在寻找以下代码。

public class SettingsActivity extends PreferenceActivity {

    /*
     * (non-Javadoc)
     * 
     * @see android.preference.PreferenceActivity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getPreferenceManager().setSharedPreferencesName("myPref"); 
        addPreferencesFromResource(R.xml.pref);
    }