SharedPreferences로 visibility 저장하는 방법

조회수 487회

스택오버플로우 참고해서 visibility를 sharedpreference로 저장하려했는데 split_two 상태만 저장이되고 나머지는 저장이 되지 않습니다. 어디를 수정해야 모든 버튼의 visibility가 저장이 될까요?

@Override
    public View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container, @NonNull Bundle savedInstanceState) {
        View v=  inflater. inflate(R.layout.calender, container, false);

        //visible저장하기
        final SharedPreferences prefs = this.getActivity().getSharedPreferences("visible", Context.MODE_PRIVATE);

        //팝업메뉴
       final Button buttonPopup = v.findViewById(R.id.btn_split);
       buttonPopup.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               PopupMenu popupMenu = new PopupMenu(getContext(), buttonPopup);
               popupMenu.getMenuInflater().inflate(R.menu.popup_split,popupMenu.getMenu());
               popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                   @Override
                   public boolean onMenuItemClick(MenuItem item) {
                       switch (item.getItemId()){
                           case R.id.split_two:

                               prefs.edit().putBoolean("three", false).apply();
                               prefs.edit().putBoolean("four", false).apply();
                               prefs.edit().putBoolean("five", false).apply();
                               prefs.edit().putBoolean("six", false).apply();
                               frame_three.setVisibility(View.GONE);
                               frame_four.setVisibility(View.GONE);
                               frame_five.setVisibility(View.GONE);
                               frame_six.setVisibility(View.GONE);
                               break;
                           case R.id.split_three:
                               prefs.edit().putBoolean("three", false).apply();
                               prefs.edit().putBoolean("four", false).apply();
                               prefs.edit().putBoolean("five", false).apply();
                               prefs.edit().putBoolean("six", false).apply();
                               frame_three.setVisibility(View.VISIBLE);
                               frame_four.setVisibility(View.GONE);
                               frame_five.setVisibility(View.GONE);
                               frame_six.setVisibility(View.GONE);
                               break;
                           case R.id.split_four:
                               prefs.edit().putBoolean("three", false).apply();
                               prefs.edit().putBoolean("four", false).apply();
                               prefs.edit().putBoolean("five", false).apply();
                               prefs.edit().putBoolean("six", false).apply();
                               frame_three.setVisibility(View.VISIBLE);
                               frame_four.setVisibility(View.VISIBLE);
                               frame_five.setVisibility(View.GONE);
                               frame_six.setVisibility(View.GONE);
                               break;
                           case R.id.split_five:
                               prefs.edit().putBoolean("three", false).apply();
                               prefs.edit().putBoolean("four", false).apply();
                               prefs.edit().putBoolean("five", false).apply();
                               prefs.edit().putBoolean("six", false).apply();
                               frame_three.setVisibility(View.VISIBLE);
                               frame_four.setVisibility(View.VISIBLE);
                               frame_five.setVisibility(View.VISIBLE);
                               frame_six.setVisibility(View.GONE);
                               break;
                           case R.id.split_six:
                               prefs.edit().putBoolean("three", false).apply();
                               prefs.edit().putBoolean("four", false).apply();
                               prefs.edit().putBoolean("five", false).apply();
                               prefs.edit().putBoolean("six", false).apply();
                               frame_three.setVisibility(View.VISIBLE);
                               frame_four.setVisibility(View.VISIBLE);
                               frame_five.setVisibility(View.VISIBLE);
                               frame_six.setVisibility(View.VISIBLE);
                               break;
                       }
                       return true;
                   }
               });
               popupMenu.show();
           }
       });
        //팝업메뉴
        frame_three.setVisibility(prefs.getBoolean("three", true) ? View.VISIBLE : View.GONE);
        frame_four.setVisibility(prefs.getBoolean("four", true) ? View.VISIBLE : View.GONE);
        frame_five.setVisibility(prefs.getBoolean("five", true) ? View.VISIBLE : View.GONE);
        frame_six.setVisibility(prefs.getBoolean("six", true) ? View.VISIBLE : View.GONE);

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 코드를 보니 split_two 일때는 frame_three~siz 를 GONE 으로 하고 프리퍼런스에 false 를 지정해주시는데, 그럼 split_three 일 때는

    prefs.edit().putBoolean("three", true).apply();
    

    true 로 넣어주셔야 하는거 아닌가요?`

    그리고 좀 더 단순하게 해서

    frame_three.setVisibility(View.VISIBLE);
    prefs.edit().putInteger("three", frame_three.getVisibility()).apply();
    
    ...
    
    frame_three.setVisibility(prefs.getInteger("three", VISIBLE);
    
    

    이런식으로 바꾸시는걸 추천드립니다. 지금 visibility 를 수동적으로 true, false 로 바꿔 넣으시다가 실수한걸로 보이네요.

    • 선생님 이거때문에 골머리를 앓고있었는데 덕분에 한번에 해결됐습니다. 정말 감사드립니다!! 문제해결뿐만 아니라 정리까지 해주시니 정말 진심 감사드립니다. 사랑합니다. 알 수 없는 사용자 2021.2.1 21:21

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

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

(ಠ_ಠ)
(ಠ‿ಠ)