프로젝트 [코테 복습] - 설정 화면

유의선·2024년 3월 1일

Preference를 이용해 복습 간격을 설정하는 화면을 만들었다.


루트 태그로 PreferenceScreen을 설정한 root_preferences.xml을 만들었다.

ListPreference를 이용해 날짜를 선택하도록 만들었다.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <PreferenceCategory app:title="@string/messages_header">
        <ListPreference
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"

            android:entries="@array/date_entries"
            app:entryValues="@array/date_values"

            android:title="@string/signature_title"
            android:summary="n일"

            android:key="date_interval"/>
    </PreferenceCategory>

</PreferenceScreen>

List에 들어가는 date_values와 date_entries의 내용은 다음과 같다.

    <string-array name="date_values">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
    </string-array>

    <string-array name="date_entries">
        <item>1일</item>
        <item>2일</item>
        <item>3일</item>
        <item>4일</item>
        <item>5일</item>
    </string-array>

PreferenceFragmentCompat 클래스를 상속받는 SettingsFragment 클래스를 만들어 XML 파일과 inflate하도록 만들었다.

ListPreference을 초기화하여 사용하였고,

SharedPreferences에 저장된 ListPreference의 값으로 ListPreference의 summary 값으로 설정하도록 하였다.

public class SettingsFragment extends PreferenceFragmentCompat {

    ListPreference listPreference;
    SharedPreferences sharedPreferences;

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

        if(rootKey == null)
            listPreference = findPreference("date_interval");

        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());

        listPreference.setSummary(getDateInterval()+"일");

        listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                listPreference.setSummary(getDateInterval()+"일");
                return true;
            }
        });

    }

    private String getDateInterval(){
        String dateInterval = sharedPreferences.getString("date_interval", "0");

        return dateInterval;
    }
}

Preference를 사용하는것은 처음이기에 이 코드로 제대로 작동할지는 알 수 없다.
MainActivity를 설정해 화면에 띄워 본 뒤 잘못된부분들은 고쳐갈 생각이다.

0개의 댓글