android + 共享首选项

标签 android sharedpreferences android-preferences

我是 android 的新手,目前在处理首选项时,我有以下疑问,API 说明如下: http://developer.android.com/reference/android/content/SharedPreferences.html 对首选项的修改必须通过 SharedPreferences.Editor 对象以确保首选项值保持一致状态

但在另一个link ,遵循如下代码风格:


public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equals(KEY_PREF_SYNC_CONN)) {           
        Preference connectionPref = findPreference(key);        
        connectionPref.setSummary(sharedPreferences.getString(key, ""));    
    }
}

那么在不使用编辑和提交的情况下编辑 Preference obj 可以吗?

编辑

编辑了代码

问题是我无法在摘要中设置默认值 这是我用来解决这个问题的完整代码....

public class Settings extends PreferenceActivity implements
                OnSharedPreferenceChangeListener {      
    //initializations      
    protected void onCreate(Bundle savedInstanceState) {
     bla bla
    PreferenceManager.setDefaultValues(getBaseContext(), R.xml.preferences, false);
    addPreferencesFromResource(R.xml.preferences);
    keys = getResources().getStringArray(R.array.prefKeys);
    p = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    //Gets the keys of the preferences
    for (int i = 0; i < keys.length; i++) {
    setSummary(p, keys[i]);
    }
    }   

   //Listener to detect changes             
   public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                    String key) {
   Preference p = findPreference(key);
   if (p instanceof EditTextPreference) {
   p.setSummary(sharedPreferences.getString(key,(String) p.getSummary()));
   }
   else if (p instanceof ListPreference) {
   p.setSummary((String) ((ListPreference) p).getEntry());
   }
   }
   //First time initialization     
   private void setSummary(SharedPreferences sharedPreferences, String key) {
   Preference p = findPreference(key);
   if (p instanceof EditTextPreference) {
    //This was the mistake I did
   //p.setSummary(sharedPreferences.getString(key,(String) p.getSummary()));
   p.setSummary(((EditTextPreference) p).getText());
   }
  else if (p instanceof ListPreference) {
   //This was the mistake I did
  //p.setSummary((String) ((ListPreference) p).getEntry());         
  p.setSummary((String) ((ListPreference) p).getEntry());
  }
  }
  }

最佳答案

PreferenceSharedPreferences 不一样。但是,它们经常一起使用。

Preference是用于显示和编辑用户首选项的 UI 类。

SharedPreferences是用于持久化应用程序设置的非 UI 类。要更改这些设置,您需要使用 edit() 获取一个 SharedPreferences.Editor 实例,然后使用 commit() 存储更改。

通常,Preference 值存储在 SharedPreferences 中。

关于android + 共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879306/

相关文章:

Android - 图像变形效果

java - 错误: Attempt to invoke interface method 'java.util.Map android.content.SharedPreferences.getAll()' on a null object reference

java - Android SharedPreferences 重置为默认值。重新启动应用程序后

java - Android:如何在自定义首选项的属性中使用 xml 文件中的字符串资源?

android - 关于 Android PreferenceActivity 的一堆问题

java - Android Webview "swiperefreshlayout"一直旋转,如何停止?

java - JNI 和取消 AsyncTask

android - 将 MapView 另存为位图

android - 将 SparseBooleanArray 保存到 SharedPreferences

android - 密码保护 Android 中的首选项