SharedPreferences로 TextView 저장하는법
조회수 583회
sharedpreference를 이용해서 카운터의 클릭 횟수는 저장을 했습니다. 어플 종료 후 다시 들어와도 클릭하면 숫자가 이어서 카운트 됩니다. 그런데 TextView는 저장이 되지 않아서 3까지 누른 후 어플 종료 후 다시 들어오면 TextView에 0이 떠있고 버튼을 누르면 4부터 숫자가 이어져 나갑니다. 제가 원하는건 1,2,3 까지 누른 후 어플 종료, 재접속하면 3떠있음, 누르면4,5,6 이어져서 나가는 것 입니다. 어떻게 해야 TextView도 저장을 할 수 있을까요?
private TextView counterText;
private int counter;
private void plusCounter() {
SharedPreferences prefs = getActivity().getSharedPreferences("counter_alone", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
counter = prefs.getInt("counter", 0);
counter++;
counterText.setText(counter + "");
editor.putInt("counter", counter);
editor.apply();
}
-
(•́ ✖ •̀)
알 수 없는 사용자
4 답변
-
IDE 가 아니라 웹상에서 작성했으므로 오류가 있을 수 있습니다.
- 와 선생님 제가 원하던대로 완벽구현이 됐습니다! 계속되는 질문에도 친절히 답변해주셔서 정말 감사합니다! 선생님의 지식 정말 부럽습니다 코드가 막혀서 고생할 때마다 도와주셔서 정말 감사합니다 ㅠㅠ 선생님 답변이 캄캄한 동굴에 들어오는 한 줄기 빛처럼 느껴지네요. 이 은혜 잊지 않겠습니다. 정말정말 감사합니다 선생님! 알 수 없는 사용자 2021.2.5 13:43
- 재밌게 코딩하세요 ㅎㅎ 김은기 2021.2.5 17:24
- 감사합니다! 항상 친절한 답변에 코딩이 더욱 즐거워졌네요 정말 감사드립니다ㅎㅎㅎ 알 수 없는 사용자 2021.2.7 13:53
-
텍스트 뷰 자체를 저장할 수는 없습니다. 해당 뷰에 들어가는 데이터를 저장해두고 뷰가 초기화 될 때 초기값을 설정해주는 방식으로 만드시면 됩니다.
TextView 를 findViewById 혹은 데이터바인딩으로 초기화 한 직후에 사용하신 것처럼 counter 를 가져와서 setText 해주시면 될것같습니다.
- 선생님 설명 감사합니다! 다름이 아니라 제가 아직 궁금한게 있습니다. TextView 는 findViewByid로 연결이 되어 xml에서 카운터 숫자를 나타내주고 있습니다. 그런데 counter는 TextView의 숫자를 올려주기 위한 도구일 뿐 xml에 매칭이 되어있는것이 없습니다. private int counter를 어떻게 findViewByid, setText 할 수 있을까요? 알 수 없는 사용자 2021.2.4 12:04
- Activity 클래스의 onCreate 함수에서 counterText 를 초기화 한 다음에 바로 setText(프리퍼런스에서 가져온 counter) 해주시면 됩니다. 김은기 2021.2.4 13:22
-
private TextView counterText; private int counter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xxx); // TODO: 쉐어드프리퍼런스를 초기화 해주세요. counter = prefs.getInt("counter", 0); counterText = findViewById(R.id.xxx_text_view); counterText.setText(counter); }
- 선생님의 좋은 답변 감사합니다! 좋은 가르침에도 불구하고 자꾸 이해하지 못하고 질문을 드려 정말 죄송합니다.. 아래에 지금까지 만든 작동하는 프래그먼트 코드를 적어놨습니다. 선생님 말씀대로 초기화 후 setText를 하려했으나 onClick안에 findViewByid를 넣으면 어플이 튕기는 문제점과 onClick case R.id up 안에 counterText.setText(counter + ""); 에서 .counter + ""대신 counter를 넣으면 카운터가 작동하지 않는 문제를 마주쳤습니다. 어디가 문제인지 알려주시면 정말 감사하겠습니다..! 알 수 없는 사용자 2021.2.4 19:44
-
private TextView counterText; private Button up; private Button reset; private int counter; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container, @NonNull Bundle savedInstanceState) { View v= inflater. inflate(R.layout.counter_alone, container, false); SharedPreferences prefs = getActivity().getSharedPreferences("counter_alone", Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); counter = prefs.getInt("counter", 0); counterText = v.findViewById(R.id.counterText); up = v.findViewById(R.id.up); reset = v.findViewById(R.id.reset); View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.up: counter++; counterText.setText(counter + ""); editor.putInt("counter", counter); editor.apply(); break; case R.id.reset: counter = 0; counterText.setText(counter + ""); editor.putInt("counter", counter); editor.remove("counter"); editor.apply(); break; } } }; up.setOnClickListener(onClickListener); reset.setOnClickListener(onClickListener); return v; } }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력