라디오 버튼은 옵션이나 설문지 등 복수개의 선택지 중에서 하나를 선택할 때 사용하는 위젯이다.
하지만 원하는 라디오 버튼에 체크를 해도 화면을 전환하거나 앱을 종료하게되면 체크했던 라디오 버튼이
해제되는 문제점이 있다. 설문지 같은 단순히 체크 후 제출하는 식의 라디오 버튼은 상태를 저장할 필요까진
없지만, 환경설정 같은 옵션 체크는 체크 후에 상태가 항상 유지되어야하기 때문에 체크 상태 저장이 필요하다.
이렇게 상태를 저장하기위해 사용하는게 'SharedPreferences'이다.
이 SharedPreferences는 앱 안에 파일을 하나 생성하고 그 안에 데이터를 저장해서 앱 재실행 시 데이터들을 복원할 수
있게 해주는데, 이번 시간에는 라디오 버튼 체크 상태를 이 파일 안에 저장 및 복원해서 상태를 유지하는 방법을
알아보도록 하겠다.
저번 시간에는 라디오 버튼을 라디오 그룹 안에 배치를 해서 처리를 했지만, 이번 시간에는 '컴파운드 버튼(CompoundButton)' 클래스로 된 라디오 버튼을 처리해보도록 할 것이다.
그런데 CompoundButton이란 무엇인가?
Button 클래스의 하위 클래스 및 4가지 버튼들의 상위 클래스로, 그 하위 목록에는 '체크박스(Check Box)',
'토글 버튼(Toggle Button)', '라디오 버튼(Radio Button)', '스위치(Switch)'가 있고, 리스너로 OnCheckedChangeListener()를 추가로 사용할 수 있다.
이제 코드로 알아보자.
두 개의 라디오 버튼을 만들고, 각 버튼을 누른 상태에서 앱을 재실행시키게되면 최근에 선택했던 버튼이 저장되어
그 상태를 유지할 수 있도록하는 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
autoBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean auto_isChecked) {
Toast.makeText(getApplicationContext(), "메모가 자동으로 저장됩니다. ", Toast.LENGTH_SHORT).show();
}
});
manualBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean manual_isChecked) {
Toast.makeText(getApplicationContext(), "메모가 수동으로 저장됩니다. (저장버튼 활성화) ", Toast.LENGTH_SHORT).show();
}
});
|
cs |
이렇게 각각의 버튼을 누를 때마다 각각의 처리를 기술하면된다.
여기까지만 하면 체크 상태 저장은 되지 않는다. SharedPreferences를 이용해서 별도의 메소드를 만들어야한다.
1
2
3
4
5
6
7
8
9
10
11
|
private void RadioStateSave(String key, boolean value) {
SharedPreferences sharedPreferences = getSharedPreferences("radio_State", MODE_PRIVATE); // "radio_state"라는 이름으로 파일생성, MODE_PRIVATE는 자기 앱에서만 사용하도록 설정하는 기본값
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(key, value); // 키와 값을 boolean으로 저장
editor.apply(); // 실제로 저장
}
private boolean UpdateState(String key) {
SharedPreferences sharedPreferences = getSharedPreferences("radio_State", MODE_PRIVATE);
return sharedPreferences.getBoolean(key, false);
}
|
cs |
위와 같이 저장 및 복원 메소드들을 만들었고, 이 메소드들을 onCreate()에서 다음과 같이 호출해주면 상태를 복원할 수가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
autoBtn.setChecked(UpdateState("auto"));
manualBtn.setChecked(UpdateState("manual"));
autoBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean auto_isChecked) {
RadioStateSave("auto", auto_isChecked);
Toast.makeText(getApplicationContext(), "메모가 자동으로 저장됩니다. ", Toast.LENGTH_SHORT).show();
saveBtn.setVisible(true);
}
});
manualBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean manual_isChecked) {
RadioStateSave("manual", manual_isChecked);
Toast.makeText(getApplicationContext(), "메모가 수동으로 저장됩니다. (저장버튼 활성화) ", Toast.LENGTH_SHORT).show();
saveBtn.setVisible(false);
}
});
|
cs |
피드백은 언제나 환영입니다.
'프로그래밍(programming) > 안드로이드(android)' 카테고리의 다른 글
[211217] Uri와 Url의 차이 (0) | 2021.12.17 |
---|---|
[210804] 안드로이드 리사이클러뷰(RecyclerView) 아이템 업데이트 (0) | 2021.08.05 |
[210801] 안드로이드 Volley와 JSON을 이용한 로또 당첨 번호 조회 (0) | 2021.08.01 |
[210731] 안드로이드 다른 액티비티의 메소드 호출하기 (0) | 2021.07.31 |
[210731] 안드로이드 라디오 버튼(Radio Button) (0) | 2021.07.31 |