마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

프리퍼런스 관련 질문입니다.

0 추천

프리퍼런스를 공부중인데요

제가 소스를 보고 있는데

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 에 값을 집어 넣을 수 있는건가요?

 

 

익명사용자 님이 2019년 3월 18일 질문

1개의 답변

0 추천
addPreferencesFromResource(R.xml.setting_preferences); 에 나오듯 setting_preferences.xml 파일에 있는 값을 Default로 설정하게 되어있는 듯 하니 살펴 보세요.

그리고 사용자가 EditPreferences같은 것을 사용하여 직접 입력 할 경우 내부적으로 Preferences 값이 변경되는 경우도 있습니다.
익명사용자 님이 2019년 3월 18일 답변
...