小吃店解散后我怎样才能得到通知?

我正在使用com.android.support:design:22.2.0库中的Snackbar。 我正在使用它来撤销删除。 为了使我的生活更轻松,我将使界面看起来像是事实上从数据源中删除,如果小吃店中的撤销button没有按下,实际上是从数据源执行删除操作。 所以,我想知道什么时候Snackbar不再可见,所以删除这些项目是安全的。

我可以调用Snackbar上的getView(),但是我不确定我应该使用哪个监听器。 我尝试setOnSystemUiVisibilityChangeListener()但没有工作,我相信它只是为系统状态栏。

另外,Snackbar不能被扩展,因为它有一个私有的构造函数。

Googledevise库支持版本23中的Snackbarcallback。请参阅Snackbar文档和callback文档 。 然后,当Snackbar被解雇(以及显示时),以及解雇的types(如果这对你有用),你会得到通知:

 snackbar.addCallback(new Snackbar.Callback() { @Override public void onDismissed(Snackbar snackbar, int event) { //see Snackbar.Callback docs for event details ... } @Override public void onShown(Snackbar snackbar) { ... } }); 

最近我自己偶然发现了这个问题,在滚动和显示Snackback的时候,在第一个消失之前显示了太多的东西。 我不得不find一个方法来知道应用程序是否应该放下Snackbar。

我个人发现这个解决scheme。

Snackbar本身并没有为状态/可视性提供任何types的监听器,但是你仍然可以从Snackbar(getView();)中获取视图对象。 从视图对象你有机会使用各种各样的方法来添加监听器。

要实现它,你必须走出常见的“一行”Toast / Snackbar的用法,因为添加监听器将返回void

我个人发现OnAttachStateChangeListener满足我的需求。

用我的代码删除一个snipper,以防它可能对你有用。

 Snackbar snack = Snackbar.make(getView(), "My Placeholder Text", Snackbar.LENGTH_LONG); snack.getView().addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { canDisplaySnackbar = false; } @Override public void onViewDetachedFromWindow(View v) { Handler h = new Handler(); h.postDelayed(new Runnable() { @Override public void run() { canDisplaySnackbar = true; } }, 1000); } }); snack.show(); 

请注意,这只是我为自己的问题执行,Handler与PostDelayed Runnable可能甚至不适合你的情况。 这只是给我一个大致的想法,我build议使用我已经拥有的片段。

要在小吃店被显示或解散时得到通知,您可以通过setCallback(回叫)提供Snackbar.Callback。

  snackbar.setCallback(new Snackbar.Callback() { @Override public void onDismissed(Snackbar snackbar, int event) { if (event == Snackbar.Callback.DISMISS_EVENT_TIMEOUT) { // Snackbar closed on its own } } @Override public void onShown(Snackbar snackbar) { ... } }); 

当Snackbar完成显示时,目前无法获得通知。

在这个线程中,一个解决方法是基于Snackbar显示持续时间的计时器来讨论的。 支持库中的小吃包不包含OnDismissListener()?

要解决此问题,需要考虑的一个问题是Snackbar持续时间可能会重新启动。 Snackbar的材料devise规范说,如果显示不相关的对话框或popup窗口,就会发生这种情况。

目前你无法实现它。

当小吃店昏暗时,没有一个听众叫。

最简单的方法是临时保存其他地方的logging(甚至是一个局部variables),然后在碰到撤消button时重新插入logging。

Interesting Posts