Нужно отобразить тост сразу после клика

Я видел похожие посты, такие как это - Отключить асинхронное отображение Toast [duplicate], и я попробовал отменить метод () оттуда, но они не решили мою проблему. Может быть, это связано с тем, что некоторая разница связана с предпочтительной деятельностью.

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

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.pref_screen);
    Context context = getApplicationContext();
    settings = PreferenceManager.getDefaultSharedPreferences(context);
    settings.registerOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
    Toast theToast;
    theToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG);

    if(key.equals("checkbox_key")){
        theToast.show();
    }
    if (key.equals("checkbox_key")&& theToast != null){
        theToast.cancel();
    }
}

1 ответ

Решение

Ваш вопрос сформулирован некорректно, но я предполагаю (после прочтения вашего кода), что вы спрашиваете, как отменить отображаемый в данный момент тост, когда вы устанавливаете / снимаете флажок и хотите сразу же отобразить новый тост в этом случае.

Проблема в том, что вы отменяете только что созданный тост, а не отображаемый тост, созданный ранее.

Попробуйте сохранить Toast в переменной-члене и отмените его. Что-то вроде:

private Toast mCurrerntToast = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    //...
}

public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
    if(key.equals("checkbox_key")){
        //If there is a previous toast displayed, cancel it
        if(mCurrentToast != null){
            mCurrentToast.cancel();
        }

        //Display a new, more current Toast message
        mCurrentToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG);
        mCurrentToast.show();
    }
}

Дайте мне знать, если мое предположение о том, о чем вы спрашивали, было неверным, и я постараюсь помочь вам больше, но я уверен, что эту проблему вы пытаетесь решить.

Другие вопросы по тегам