Android CheckBox не прослушивает OnCheckedChangeListener при восстановлении состояния фрагмента - PullRequest
0 голосов
/ 16 января 2019

В моем приложении для Android у меня есть фрагменты , а в одном из фрагментов у меня есть флажок .Этот флажок имеет такой прослушиватель, который показывает диалоговое окно предупреждения при проверке:

@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
      if (isChecked) {
           alertDialog.setPositiveButton(R.string.is_ok, new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int arg1) {
                  NItem item = new NItem();
                  item.isOk = 1;
                  setItem(item);
              }
           });
           alertDialog.setNegativeButton(R.string.is_not_ok, new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int arg1) {
                   NItem item = new NItem();
                   item.isOk = 0;
                   setItem(item);
              }
           });
           alertDialog.show();
       }
   }

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

1 Ответ

0 голосов
/ 16 января 2019

Вы должны обнаруживать, когда пользователь касается вашего флажка , и обрабатывать onCheckedChanged() только при касании .

Вот пример:

static Boolean isTouched = false;

yourCheckbox.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                isTouched = true;
                return false;
            }
        });


//Listen to checked change, but only if the toggle is touched, not when initializing the toogle
yourCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
        if (isTouched) {
            //Do your things
            isTouched = false;
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...