Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用SharedPreferenceChangeListener的PreferenceManager的SharedReference默认值_Android_Preferenceactivity_Preference - Fatal编程技术网

Android 使用SharedPreferenceChangeListener的PreferenceManager的SharedReference默认值

Android 使用SharedPreferenceChangeListener的PreferenceManager的SharedReference默认值,android,preferenceactivity,preference,Android,Preferenceactivity,Preference,我想创建一个选项类,可以在其中加载用户的所有首选项。如果SharedReference中没有键,那么我希望优先加载xml默认值 问题是,我无法让一个类同时使用带有实现OnSharedPreferenceChangeListener的PreferenceActivity。我不能把钥匙装进去。那么其他应用程序是如何做到这一点的呢?我也尝试过使用PreferenceManager的逗号代码,但没有成功:( 类选项的一些代码 static SharedPreferences GetSharedPrefe

我想创建一个选项类,可以在其中加载用户的所有首选项。如果SharedReference中没有键,那么我希望优先加载xml默认值

问题是,我无法让一个类同时使用带有实现OnSharedPreferenceChangeListener的PreferenceActivity。我不能把钥匙装进去。那么其他应用程序是如何做到这一点的呢?我也尝试过使用PreferenceManager的逗号代码,但没有成功:(

类选项的一些代码

static SharedPreferences GetSharedPreferences(Context context){


        return context.getSharedPreferences("Name", Context.MODE_PRIVATE);

}

public static void ClearSharedPreferences(Context context){
    GetSharedPreferences(context).edit().clear().apply();
}

public static void SaveTextSize(Context context, int size){
    SharedPreferences sharedPreferences = GetSharedPreferences(context);

    if (textSizeKey == null)
        textSizeKey = context.getString(R.string.textSizeKey);

    sharedPreferences.edit().putInt(textSizeKey, size).commit();

    Log.v("Saving", "Text size save: " + size);
}

public static int LoadTextSize(Context context) {
    SharedPreferences sharedPreferences = GetSharedPreferences(context);

    if (textSizeKey == null)
        textSizeKey = context.getString(R.string.textSizeKey);

    if (!sharedPreferences.contains(textSizeKey))
        Log.i("Load", "Key: " + textSizeKey + " not found");

    return sharedPreferences.getInt(textSizeKey, 16);
}
首选项活动的代码

public class SettingsActivity extends PreferenceActivity implements
    OnSharedPreferenceChangeListener {
private CheckBoxPreference mCheckBoxPreference;
private ListPreference mListPreference;

private static String updateCheckBoxName;
private static String updateListName;
private SharedPreferences sharedPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.preferences);

        updateCheckBoxName = getString(R.string.options_main);
        updateListName = getString(R.string.options_toggle);

        //PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
    //sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
         sharedPreferences = Options.GetSharedPreferences(this);


    mCheckBoxPreference = (CheckBoxPreference) findPreference(updateCheckBoxName);
    mListPreference = (ListPreference) findPreference(updateListName);

}

@Override
protected void onResume() {
    super.onResume();
     updateScreen(); 

    // Set up a listener whenever a key changes
     sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}

private void updateScreen() {
    mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(
            updateCheckBoxName, false) ? "Will automatic update"
            : "No automatic update");
    mListPreference.setSummary(mListPreference.getEntry());
}

@Override
protected void onPause() {
    super.onPause();

     sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
        Preference preference) {
    // Hack for dialog
    if (preference.equals(getString(R.string.textSizeKey))){
        TextSizeAlert textSizeAlert = new TextSizeAlert(SettingsActivity.this) {

            @Override
            public void SizeCallback(int size) {
                Options.SaveTextSize(getApplicationContext(), size);
            }

        };          
        textSizeAlert.ShowTextDialog();
        return true;
    }

    return super.onPreferenceTreeClick(preferenceScreen, preference);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
     updateScreen();
}

}
主要活动:

public void SomeMethod() {
     int updateTime = Options.LoadUpdateTime(this);
     //do something with it
}

弄清楚了,我得用PreferenceManager

因此,在选项中加载首选项管理器

static SharedPreferences GetSharedPreferences(Context context){
    //set xml default values if not set.
    PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
    return PreferenceManager.getDefaultSharedPreferences(context);
}
此外,我还必须将SharedReferences注册和注销连接到上述方法