본문 바로가기
안드로이드 자바

[Android][Java]PreferenceScreen 사용해서 SharedPreferences데이터 저장하기

by teamnova 2023. 4. 28.

안녕하세요 오늘은 PreferenceScreen을 사용해서 사용자 설정창을 만들고 해당 데이터를 SharedPreferences에 저장을 시키겠습니다.

 

먼저 build.gradle(:app)에 의존성을 추가해 줍니다

implementation 'androidx.preference:preference:1.1.0'

그리고 나서 res파일에 xml 파일이 없다면 xml 파일을 생성을 해주고 리소스 파일을 생성합니다

xml 코드입니다.

setting_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="기본 설정">
        <CheckBoxPreference
            android:key="notifications"
            android:title="알림"
            android:summary="알림 허용"
            android:defaultValue="true" />
        <SwitchPreference
            android:key="location"
            android:title="위치 서비스"
            android:summary="위치 정보 수집"
            android:defaultValue="false" />
    </PreferenceCategory>
    <PreferenceCategory android:title="계정 정보">
        <EditTextPreference
            android:key="username"
            android:title="사용자 이름"
            android:summary="사용자 이름을 입력하세요"
            android:dialogTitle="사용자 이름"
            android:defaultValue="user" />
    </PreferenceCategory>
</PreferenceScreen>

다음은 자바 클래스를 생성해줍니다.

PreferenceFragment.class

public class PreferenceFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.setting_layout,rootKey);
    }
}

다음은 메인 액티비티 xml파일입니다

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/setting_layout"/>


</androidx.constraintlayout.widget.ConstraintLayout>

다음은 메인 클래스입니다

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction().replace(R.id.setting_layout,new PreferenceFragment()).commit();

        SharedPreferences preferences;
        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        preferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
                Log.d("TAG", "onSharedPreferenceChanged: " + s);
            }
        });

    }

}

실행을 하면 다음 화면과 같습니다

 

화면을 띄우게 되면 기본 설정되있는 값으로 SharedPreferences에 값이 추가가 되게 됩니다.

다음으로 값을 수정해 보겠습니다. 따로 해야될 일은 없고 클릭으로 체크박스를 체크를 하던 이름을 입력하고 확인만 하면 바로 업데이트가 됩니다.