프리퍼런스를 공부중인데요
제가 소스를 보고 있는데
SharedPreferences mPrefs = null;
이런게 있고
String device = mPrefs.getString(key, defaultVal);
이런게 있습니다.
저장된 키값으로 value를 가져와서 쓰는데요
문제는 프리퍼런스에 집어넣는 부분이 안나온다는 겁니다 소스에요.
제가 생각할 때는
SharedPreferences.Edior putString(key, value)
같은 소스 구문이 있어야 될거 같은데 없다는 겁니다.
PreferenceFragment
PreferenceActivity
클래스가 각각 있습니다.
commit도 찾아 봤는데 없거든요??
ctrl + shift + f 로 아무리 찾아봐도, commit 이란 editor가 검색이 안되고,
getstring만 프리퍼런스에서 써서 값을 받아오더라고요
도대체 어디서 값을 집어넣는지 모르겠어요
있는거는
@Override
public void onResume() {
super.onResume();
if ( mPrefs != null ) {
mPrefs.registerOnSharedPreferenceChangeListener(onSharedPrefChangeListener);
}
}
@Override
public void onPause() {
super.onPause();
if ( mPrefs != null ) {
mPrefs.unregisterOnSharedPreferenceChangeListener(onSharedPrefChangeListener);
}
}
}
이렇게 체인지리스너를 등록하고요
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_settings);
addPreferencesFromResource(R.xml.setting_preferences);
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
이렇게 프리퍼런스 초기화를 해주고요.
SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.pref_key_map_rotation))) {
Intent intent = new Intent(SettingPrefFragment.ACTION_PREFS_CHANGE);
intent.putExtra("key", getString(R.string.pref_key_map_rotation));
sendBroadcast(intent);
}else if (key.equals(getString(R.string.pref_key_map_rotation_offset))) {
Intent intent = new Intent(SettingPrefFragment.ACTION_PREFS_CHANGE);
intent.putExtra("key", getString(R.string.pref_key_map_rotation_offset));
sendBroadcast(intent);
}
setPreferenceScreen();
}
};
이런 리스너를 만드는거 뿐인거 같은데
도대체 어디서 key 값으로 프리퍼런스에 값을 집어 넣는지 모르겠어요.
하나 의심가는거는 set
private void setPreferenceScreen() { // 서머리값 갱신
if ( mSettingUtil != null ) {
BluetoothDevice device = mSettingUtil.getDgpsDevice();
if ( device != null) {
String deviceString = makeDeviceString(device);
findPreference(getString(R.string.pref_key_dgps_device)).setSummary(deviceString);
}
device = mSettingUtil.getDetectorDevice();
if ( device != null) {
String deviceString = makeDeviceString(device);
findPreference(getString(R.string.pref_key_detector_device)).setSummary(deviceString);
}
int rotationOffset = mSettingUtil.getMapRotationOffset();
String rotationOffsetString = String.valueOf(rotationOffset);
if(rotationOffsetString!=null) {
findPreference(getString(R.string.pref_key_map_rotation_offset)).setSummary(rotationOffsetString);
}
}
}
이 부분에서 setSummary 인데, 이건 value값을 저장하는게 아니죠??
그냥 환경설정에 표시될 서머리값만 바꾸는거자나요?
editor나 putstring 같은거 안쓰고도 sharedpreference 에 값을 집어 넣을 수 있는건가요?