1

Проблема заключается в том, что Toast появляется столько раз, сколько вы открываете действие «Настройки», а мне нужно это только один раз после каждого щелчка на CheckBox.Почему тост появляется больше раз, чем мне нужно?

Благодарим всех, кто пытался улучшить мой код.

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

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

    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(); 
        } 
    } 
    

    }

ответ

0

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