1

Android を初めて使用し、現在環境設定に取り組んでいるときに、次の疑問がありました。API は次のように述べています : http://developer.android.com/reference/android/content/SharedPreferences.html設定値が一貫した状態に保たれるようにするための .Editor オブジェクト

しかし、別のリンクでは、次のコード スタイルに従います。


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

edit と commit を使用せずに 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());
  }
  }
  }
4

2 に答える 2

1

PreferenceSharedPreferences同じではありません。ただし、それらはしばしば一緒に使用されます。

Preferenceユーザーによる設定を表示および編集するための UI クラスです。

SharedPreferencesアプリケーション設定を永続化するための非 UI クラスです。これらの設定を変更するには、 でSharedPreferences.Editorインスタンスを取得しedit()、 で変更を保存しますcommit()

通常、Preference値は に格納されSharedPreferencesます。

于 2013-04-08T12:51:40.050 に答える