Почему тост появляется чаще, чем мне нужно?

Проблема в том, что тост появляется столько раз, сколько вы открываете действие "Настройки", а он мне нужен только один раз после каждого нажатия кнопки "CheckBox".

Заранее спасибо всем, кто пытался улучшить мой код.

Более подробное описание того, как работает код:

  • Я захожу в настройки деятельности и отмечаю флажок
  • Тост появляется один раз
  • Я возвращаюсь к предыдущему действию с помощью кнопки "Назад", ничего не делаю, возвращаюсь к действию "Настройки" еще раз и устанавливаю флажок.
  • Тост появляется дважды
  • Я возвращаюсь к предыдущему действию с помощью кнопки "Назад", ничего не делаю, возвращаюсь к действию "Настройки" еще раз и устанавливаю флажок.
  • Тост появляется три раза
  • И так далее

    public class PrefActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_screen);
        Context context = getApplicationContext();
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
        settings.registerOnSharedPreferenceChangeListener(this);
    }
    
    public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
        Toast mToast;
        mToast = Toast.makeText(this, "toast text", Toast.LENGTH_SHORT);
        if(key.equals("checkbox_key")){
            mToast.show();
        }
    }
    

    }

1 ответ

Решение

Вам следует позвонить settings.unregisterOnSharedPreferenceChangeListener() в вашем onPause() метод, когда вы покидаете активность. И я предлагаю позвонить settings.registerOnSharedPreferenceChangeListener() в вашем onResume() callback скорее, чем onCreate(),