【问题标题】:How do I wait() for the snackbar onDismissed process to finish?如何 wait() 让小吃店 onDismissed 进程完成?
【发布时间】:2019-11-11 08:25:44
【问题描述】:

我想在snackbar onDismissed 完成后启动一个进程。

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

由于snackbar 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.
            }

我意识到我可以在 onDismissed 中调用 finish(),但是还有其他操作会导致快餐栏关闭,我不希望它们完成活动。 有没有办法在继续执行代码之前等待snackbar 进程完成?

【问题讨论】:

  • 还有哪些其他操作会导致小吃店关闭。你能发布你的完整代码吗?

标签: java android asynchronous wait snackbar


【解决方案1】:

查看Snackbar 的Android 文档。您可以使用 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();
}

【讨论】:

  • 第二个选项效果很好。一旦 onDismissed 完成了它的过程,有几个动作会关闭快餐栏并需要启动他们的线程。
猜你喜欢
  • 1970-01-01
  • 2018-09-26
  • 2020-07-25
  • 2020-10-28
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
相关资源
最近更新 更多