支持库中的Snackbar不包含OnDismissListener()?

S F*_*itz 20 android android-support-library android-design-library android-snackbar

我想实现最新设计支持库中包含的新Snackbar,但它的提供方式似乎与我的反直觉相比,而且我认为很多其他人使用它.

当用户执行重要操作时,我希望允许他们通过Snackbar撤消它,但似乎没有办法检测它何时被解除以执行操作.我有意义的做法如下:

  1. 用户采取行动.
  2. 显示Snackbar并更新UI,就像操作已完成一样(即看起来数据已发送到数据库,但实际上还没有).
  3. 如果用户按下"撤消",则还原UI更改.如果没有,当Snackbar被解散时,它将发送数据.

但是因为我没有看到任何可访问的OnDismissListener,所以我必须:

  1. 用户采取行动.
  2. 立即将信息发送到数据库并更新UI.
  3. 如果用户按下"撤消",则向数据库发送另一个调用以删除刚刚添加的数据并恢复UI更改.

我真的想避免不得不对数据库进行两次调用,只需在应用程序知道它是安全的时候发送一个(用户已经避免按"撤消").我注意到在第三方库中通过EventListener实现了这一点,但我真的很想坚持使用Google库.

4gu*_*71n 24

现在确实如此

Snackbar.make(getView(), "Hi there!", Snackbar.LENGTH_LONG).setCallback( new Snackbar.Callback() {
                @Override
                public void onDismissed(Snackbar snackbar, int event) {
                    switch(event) {
                        case Snackbar.Callback.DISMISS_EVENT_ACTION:
                            Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show();
                            break;
                        case Snackbar.Callback.DISMISS_EVENT_TIMEOUT:
                            Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show();
                            break;
                    }
                }

                @Override
                public void onShown(Snackbar snackbar) {
                    Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show();
                }
            }).setAction("Go away!", new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            }).show();
Run Code Online (Sandbox Code Playgroud)