Показывать только один тост в клике?

Я хочу уведомить пользователя, что он достиг минимального значения. Значение устанавливается нажатием кнопки. Если он продолжит нажимать на кнопку, когда будет достигнуто минимальное значение, тосты начнут появляться и ставиться в очередь, поэтому исчезновение всех занимает много времени.

btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
             if (value < MIN_VALUE) {
                    Toast.makeText(MyActivity.this, "You have reached the minimum value",
                            Toast.LENGTH_SHORT).show();
                }
        });

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

3 ответа

Решение

Добавьте флаг, который указывает, была ли кнопка уже нажата или нет:

btn.setOnClickListener(new View.OnClickListener() {
        boolean pressed = false;
        public void onClick(View view) {
         if ((value < MIN_VALUE) && (!pressed)) {
                Toast.makeText(MyActivity.this, "You have reached the minimum value",
                        Toast.LENGTH_SHORT).show();
                pressed = true;
            }
    });
public static void showToast(Context cont, String message) {
    if (mToast == null) {
        mToast = Toast.makeText(cont, message, Toast.LENGTH_SHORT);
    }
    if (!mToast.getView().isShown()) {
        mToast.setText(message);
        mToast.show();
    }
}

Как только он достигнет своего предела, отобразите тост и отключите кнопку onClick, переопределив button.setEnabled(false);

Таким образом, теперь пользователь не сможет нажать кнопку более одного раза.

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