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
댓글 입력