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 답변

  • gist ClickerFragment.java

    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;
        }
        }
    
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)