首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >支持库中的Snackbar不包括OnDismissListener()?

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

Stack Overflow用户
提问于 2015-06-04 09:01:16
回答 7查看 6.4K关注 0票数 20

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

当用户执行一个重要的操作时,我希望允许他们通过Snackbar撤销它,但是似乎无法检测出何时取消它来执行该操作。这样做对我来说是有意义的:

  1. 用户做动作。
  2. 显示Snackbar和update UI,就好像操作已经完成一样(即数据似乎已发送到数据库,但实际上尚未完成)。
  3. 如果用户按下“撤销”,则还原UI更改。如果没有,则在关闭Snackbar时,它将发送数据。

但是,由于我没有看到任何可访问的OnDismissListener,因此我不得不:

  1. 用户做动作。
  2. 立即将信息发送到数据库并更新UI。
  3. 如果用户按下“撤销”,则向数据库发送另一个调用,以删除刚刚添加的数据并还原UI更改。

我真的很想避免对数据库进行两次调用,并且在应用程序知道它是安全的(用户已经避免按“撤销”)的情况下,只发送一个。我注意到通过EventListener在第三方库中有一些实现,但我真的很想继续使用Google库。

EN

Stack Overflow用户

回答已采纳

发布于 2015-08-24 19:44:01

现在它是有吗?

代码语言:javascript
运行
复制
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();
票数 24
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30639470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档