SharedPreference 에 Switch 상태를 저장할 때,

조회수 1297회

이 코드는 Xamarin 코드입니다.

        _Display_Switch = (Switch)_TT.FindViewById(Resource.Id._Display_Switch);
        _Display_Switch.Checked = _Saved_Data.GetBoolean("Test_Switch", false);

        if (_Saved_Data.GetBoolean("Test_Switch", false) == true)
        {
            Toast.MakeText(Activity, "Display를 활성화 합니다", ToastLength.Short).Show();
        }
        else if (_Saved_Data.GetBoolean("Test_Switch", false) == false)
        {
            Toast.MakeText(Activity, "Display를 비활성화 합니다", ToastLength.Short).Show();
        }

        _Display_Switch.CheckedChange += _Display_Switch_CheckedChange; 



    private void _Display_Switch_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
    {
        if (e.IsChecked == true)
        {
            Toast.MakeText(Activity, "Display를 활성화 합니다", ToastLength.Short).Show();
        }
        else if (e.IsChecked == false)
        {
            Toast.MakeText(Activity, "Display를 비활성화 합니다", ToastLength.Short).Show();
        }

        _Data_Edit.PutBoolean("Test_Switch", e.IsChecked);
        _Data_Edit.Apply();
    }

이런식으로 아래에서 이벤트를 줬던걸 위에서 한번 더 해줘야지 정상적으로 껏다 켰을 때도 이벤트가 나타나더라구요. 이걸 위에 문장에서 다시 한번 이벤트 선언 안하고 바로 사용할 수는 없는건가요?

        if (_Saved_Data.GetBoolean("Test_Switch", false) == true)
        {
            Toast.MakeText(Activity, "Display를 활성화 합니다", ToastLength.Short).Show();
        }
        else if (_Saved_Data.GetBoolean("Test_Switch", false) == false)
        {
            Toast.MakeText(Activity, "Display를 비활성화 합니다", ToastLength.Short).Show();
        }

다시 말해서, 이 부분을 삭제하더라도 껏다켰을때 정상적으로 이벤트가 발생하도록 하고 싶습니다..

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 껏다 켯다 라는 말이 앱 종료/실행을 의미하는 것인가요? 또한 이벤트 발생이란 것이 토스트 메시지 발생을 말씀 하시는건가요? 알 수 없는 사용자 2018.8.6 10:31
  • 아 말을 잘못써놧네요. 네 메뉴창을 닫았다가 켜거나 앱을 종료했다 실행했을 때, 그리고 이벤트는 현재는 토스트 메시지로 테스트중이라 토스트 메시지가 맞겠네요. 추후에는 다른 걸로 바꿀 생각입니다. 알 수 없는 사용자 2018.8.6 14:17

1 답변

  • switch 객체를 가져오고 CheckedChange 를 등록 한 후에 preference 값을 불러와서 checked 값을 설정 해주면 될 것 같습니다. 현재 순서는 checked 에 preference 값이 먼저 세팅 되고 CheckedChange 를 등록 하고 있는 것 같네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 이상한게, pis님 말대로 해보기도 했는데, 그렇게 하면 true로 했을때는 정상적으로 작동으로 해요, 그런데 false 상태에서는 나갔다왔을 때 아무런 토스트도 뜨질않더라구요;;; 알 수 없는 사용자 2018.8.6 15:38
    • 지금 다시 해봣는데, True에 대한 내용은 제대로 저장이 잘 되는 것 같아요. 그런데 false 의 내용이 저장이 안되는 것 같은데 이거 왜 이러는걸까요?ㅠ 알 수 없는 사용자 2018.8.6 16:06
    • 음 CompoundButton 코드를 살펴보니 default value 는 false 이고 값이 달라질때만 CheckedChanged 콜백을 호출 하게 되있네요.. 따라서 false 상태에서 종료 -> 실행 시에는 토스트 메세지가 실행 안되는게 맞고, 아무래도 앱 실행 -> checked 값 설정 -> checked 값에 따른 토스트 창 show -> CheckedChange 등록 순서로 처리 해야 할 것 같습니다 알 수 없는 사용자 2018.8.6 16:16
    • 근데 pis님 말씀대로라면 지금 위에 코드와 달라지는 부분이 없지 않나요? 알 수 없는 사용자 2018.8.6 16:34
    • 네 결국엔 처음에 처리하신대로 하는것이 불가피해 보입니다. 알 수 없는 사용자 2018.8.6 16:39
    • 음. 역시 그렇게 하는 수 밖에 없겠네요 ㅠ 상담해주셔서 감사합니다! 알 수 없는 사용자 2018.8.6 17:44

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)