Android How to use EditTextPreference by not string types

사용 언어: Kotlin 2.3.0
사용 버전: Android Studio Otter 3 Feature Drop | 2025.2.3


안드로이드 How to use EditTextPreference by not string types를 알아보겠습니다.



EditTextPreference(에딧 텍스트 프레퍼런스)는 SharedPreferene(셰어드 프레퍼런스)의 값을 보여주고 수정할 수 있게 해줍니다.
하지만, 하나의 문제가 있는데요. SharedPreference의 다양한 Type(타입)을 전부 사용할 수 없다는 점입니다.
String(문자열)으로만 받으며, 다른 Type을 넣을 시 타입 변환 오류를 반환하며 종료됩니다.


그럼 우리는 SharedPreference에 Int(인트), Long(롱), Float(플롯) 형을 String으로 저장해야 하는 것일까요?
그럼 조금 불편할 것 같네요.


해결책으로는 EditTextPreference를 우리 입맛에 맞게 Custom(커스텀) 하는 방법이 있습니다.
아무 Kotlin 파일이나 만들어줍니다.
저는 이름을 CustomEditTextPreference라고 지었습니다.





EditIntPreference를 만들어 준 다음, EditTextPreference를 상속받습니다.

그리고 EditTextPreference가 가지고 있는 모든 생성자의 경우를 작성해 줍니다.





그리고 하단에 getPersistedString과 persistString을 아래와 같이 override(오버라이드) 합니다.





33번 줄은 EditTextPreference에서 String을 가져올 때, getPersistedString이 호출이 되는데, 우리는 Int형을 사용하므로 getPersistedInt로 치환해서 사용합니다.



39번째 줄은 EditTextPreference가 업데이트될 때의 행위를 정합니다.



xml에 다음과 같이 사용할 수 있습니다.





원래 EditTextPreference는 자동으로 SharedPreference의 값을 최신화하지만, 우린 Int형으로 변환했기 때문에 자동으로 업데이트가 안 됩니다.



그래서, 코드 상에서 업데이트를 해줘야 합니다.



PreferenceFragmentCompat으로 가서 findPreference<EditIntPreference>를 해줍니다. Key 값은 xml에 사용한 Key 값을 사용합니다.

14번째 줄에 setOnPreferenceChangeListener가 값이 변경될 때 작동하는데, 이때 sharedPreference에 수동으로 최신화를 해주면 됩니다.





끝.


카테고리: Android

댓글

이 블로그의 인기 게시물

일본어 문장부호

KiCad 시작하기 2 (PCB 만들기)

Android Notification with Full Screen

Python urllib.parse.quote()

KiCad 시작하기 7 (FreeRoute 사용하기 2)

KiCad 시작하기 1 (회로도 만들기)

음악 총보(Score), 파트보(Part)

Android Room database embedded and relation

Python OpenCV 빈 화면 만들기

Android R class