我该如何等待()快餐栏的onDismissed过程完成?

时间:2019-06-30 06:13:09

标签: java android asynchronous wait snackbar

我想在点心栏onDismissed完成之后开始一个过程。

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.
            }

我意识到我可以在onDismissed中调用finish(),但是还有其他一些动作可以导致小吃店关闭,并且我不希望他们完成活动。 在继续执行代码之前,是否有一种等待小吃栏过程完成的方法?

1 个答案:

答案 0 :(得分:0)

查看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();
}