тост сообщение должно отображаться столько раз, сколько сработало, но оно отображается только один раз - PullRequest
2 голосов
/ 14 октября 2019

У меня разные кнопки, которые запускают разные тосты;Все они запускаются с помощью onClick или onLongClick. Я инициализировал все тостовые сообщения в моем методе OnCreate. Я решил создать один глобальный тост, чтобы при каждом отображении тоста я говорил: «1001 *, а затем toast = exampleToast; toast.show;», чтобы избежать постановки тостов в очередь и облегчения отмены любого тоста, отображаемого перед отображением нового тоста. один.

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

private statice Toast toast - мой глобальный тост;Я попытался сделать его статичным, но это не решило проблему.

        private static Toast toast;        // copies different toast messages; easily referenced and cancelled
        private Toast backToast, deletedToast, setETimesToast, setRTimesToast, setLapsToast, savedToast,
        finishToast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Toast longClickToDeleteToast = Toast.makeText(MainActivity.this, R.string.long_press, Toast.LENGTH_SHORT);
        final Toast longClickToEditToast = Toast.makeText(MainActivity.this,"Long click to edit Title", Toast.LENGTH_SHORT);
        final Toast underDevToast = Toast.makeText(MainActivity.this, R.string.under_development, Toast.LENGTH_SHORT);
        finishToast = Toast.makeText(MainActivity.this, R.string.finished, Toast.LENGTH_SHORT);
        savedToast = Toast.makeText(MainActivity.this, R.string.saved , Toast.LENGTH_SHORT);
        setETimesToast = Toast.makeText(MainActivity.this, R.string.set_etime , Toast.LENGTH_SHORT);
        setRTimesToast = Toast.makeText(MainActivity.this, R.string.set_rtime, Toast.LENGTH_SHORT);
        setLapsToast = Toast.makeText(MainActivity.this, R.string.set_laps , Toast.LENGTH_SHORT);
        backToast = Toast.makeText(MainActivity.this, "Tap again to exit", Toast.LENGTH_SHORT);
        deletedToast = Toast.makeText(MainActivity.this, R.string.deleted, Toast.LENGTH_SHORT);

В следующем коде, например, могут быть показаны три разных тоста. Однако, если сработал один тост, он больше не будет отображаться, пока я не активирую другой тост, это сводит меня с ума!

public void onClick(View view){                
      if(toast != null) {
             toast.cancel();
             toast = null;
      }
      if(checkFields()){
             return;
      }
    private boolean checkFields() {
        final boolean b = true;
        toast = null;
        if (minutes == 0 && seconds == 0) {
            toast = setETimesToast;
            toast.show();
            return b;
        }
        if (restMin == 0 && restSec == 0) {
            toast = setRTimesToast;
            toast.show();
            return b;
        }
        if(laps == 0){
            toast = setLapsToast;
            toast.show();
            return b;
        }
        return false;
    }

Ответы [ 3 ]

1 голос
/ 14 октября 2019

попробуй поставить toast.show ();в вашей функции onClick ()

1 голос
/ 14 октября 2019

Я решил проблему, добавив условие && toast.getView().isShown(), чтобы if (toast != null && toast.getView().isShown()) toast.cancel()

1 голос
/ 14 октября 2019

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

...