Как мне дождаться () завершения процесса снэк-бара onDisissed? - PullRequest
0 голосов
/ 30 июня 2019

Я хочу начать процесс после завершения снэп-бара onDisissed.

if (snackbar != null){
                    snackbar.dismiss();
                    finish();
                } else {
                    finish();
                }

Поскольку снэк-бар onDismissed является асинхронным, действие будет завершено до завершения задачи onDismissed.

snackbar.addCallback(new Snackbar.Callback() {

            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                if (event != DISMISS_EVENT_ACTION) {
                    // Some work to be done.
            }

Я понимаю, что могу вызывать finish () в onDismissed, но есть и другие действия, которые приводят к закрытию снэк-бара, и я не хочу, чтобы они заканчивали действие. Есть ли способ дождаться завершения процесса снэк-бара, прежде чем продолжить через код?

1 Ответ

0 голосов
/ 30 июня 2019

Посмотрите на документацию по Android для Snackbar . Вы можете использовать DISMISS_EVENT_MANUAL, чтобы показать, что закрытие закусочной происходит из-за вызова dismiss ().

snackbar.addCallback(new Snackbar.Callback() {

        @Override
        public void onDismissed(Snackbar snackbar, int event) {
            if (event == DISMISS_EVENT_MANUAL) {
                // Some work to be done.
                activity.finish()
            }
        }

Другим вариантом является расширение Snackbar.Callback (). Что-то вроде

class MyCallback extends Snackbar.Callback {
      Runnable run;
      @Override
      public void onDismissed(...) {
           // Do something
           if (run) run.run();
      }
}
BaseCallback<Snackbar> callback = new MyCallback();
snackbar.addCallback(callback);

А затем сделайте это, когда хотите закончить увольнение.

if (snackbar != null){
    callback.run = new Runnable() {
         void run() {
             finish();
         }
    };
    snackbar.dismiss();
} else {
    finish();
}
...