Проблема с сохранением проверенного состояния просмотра текста, он ведет себя неправильно с несколькими элементами - PullRequest
1 голос
/ 28 апреля 2019

Я сделал действие, состоящее из CheckTextView и TextView.Когда пользователь устанавливает флажок, я хочу сохранить это состояние, когда пользователь покидает действие или закрывает приложение.

Я добавил onClickListener для каждого CTV.

Затем я пытаюсь сохранить его в методах onPause и onResume.Я не могу устранить эту проблему, так как флажки работают, когда я сохраняю только некоторые из них, они работают (они изменяются, но работают с 1-5 из них), но когда я добавляю их все, они не сохраняются, когда я возвращаюсь кактивность.

//this will always work and will save the state of the boxes


protected void onPause() {
        super.onPause();

        save(ctv1.isChecked());
        save(ctv2.isChecked());
        save(ctv3.isChecked());


}

protected void onResume() {
        super.onResume();


        ctv1.setChecked(load());
        ctv2.setChecked(load());
        ctv3.setChecked(load());
}


//when I add all of them, they are always either checked or unchecked
//it doesn't matter what combination of them I try, it seems that it is //always working with a couple of CTV's but fails with more than 5-6 of them



//this is how my onClickListener looks like

     CheckedTextView ctv1 = (CheckedTextView) findViewById(R.id.ctvFOX1);
      ctv1.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              if (ctv1.isChecked()) {
                  ctv1.setChecked(false);


              }
              else {
                  ctv1.setChecked(true);

              }
          }
      });




//save and load methods


private void save(final boolean isChecked) {
    SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean("check", isChecked);
    editor.apply();
}

private boolean load() {
    SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    return sharedPreferences.getBoolean("check", false);
    }

1 Ответ

0 голосов
/ 28 апреля 2019

Поскольку для сохранения значения CheckedTextView's используется только одна клавиша!

 private void save(final boolean isChecked, String key) {
        SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(key, isChecked);
        editor.apply();
    }

    private boolean load(String key) {
        SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
        return sharedPreferences.getBoolean(key, false);
    }

    protected void onPause() {
        super.onPause();
        save(ctv1.isChecked(), "check1");
        save(ctv2.isChecked(), "check2");
        save(ctv3.isChecked(), "check3");



    }

    protected void onResume() {
        super.onResume();
        ctv1.setChecked(load("check1"));
        ctv2.setChecked(load("check2"));
        ctv3.setChecked(load("check3"));

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...