Как отменить тост, созданный другим способом на андроиде? - PullRequest
9 голосов
/ 31 марта 2011

У меня есть следующий код:

private Toast movieRecordToast;

    private void displayNextMovie() {
        if (movieRecordToast != null) movieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often)
        movieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT);
        movieRecordToast.show();

    private void displayPrevMovie() {
        if (movieRecordToast != null) movieRecordToast.cancel();
        movieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT);
        movieRecordToast.show();        

Но если displayNextMovie вызывается быстро несколько раз, а затем вызывается displayPrevMovie, тост «Next» все еще отображается и только после этого отображается «Prev». Похоже, отмена не работает должным образом.

Ответы [ 3 ]

29 голосов
/ 31 марта 2011

Вместо создания нового объекта Toast каждый раз, когда требуется отобразить новый текст, вы можете легко удерживать только один объект Toast и отменять текущий Toast в любое время.Перед отображением следующего Toast вы можете изменить текст с помощью функции Toast.setText().

Пример кода:

private Toast mToastText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create the object once.
    mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT);
}

private void displayText(final String message) {
    mToastText.cancel();
    mToastText.setText(message); 
    mToastText.show();
}
0 голосов
/ 04 февраля 2015

Вроцлавское решение превосходно! Однако, он прикручивает тост при переходе от длинного сообщения к короткому и наоборот Чтобы исправить это, вместо использования предыдущего объекта воссоздайте его. Поэтому вместо этой строки:
mToastText.setText(message);
напишите это: myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
Анимация также выглядит лучше:)

0 голосов
/ 31 марта 2011

Я думаю, что есть много способов показать пользователю следующую / предыдущую информацию.Я бы вообще отбросил тосты и обновил бы текст TextView названием следующего / предыдущего фильма.Это устранит вашу проблему, а также, IMHO, улучшит пользовательский интерфейс.

Однако, если ваши требования к дизайну запрашивают всплывающие уведомления, попробуйте:

...