最近我自己在滚动和显示 Snackback 时偶然发现了这个问题,在第一个甚至消失之前显示了太多。我必须想办法知道应用程序是否应该放置 Snackbar。
我个人找到了这个解决方案。
确实 Snackbar 本身并没有为它的状态/可见性提供任何类型的侦听器,但是您仍然可以从 Snackbar 中获取视图对象( getView(); )。在 View Object 中,您有机会使用多种方法来添加侦听器。
要实现它,您必须摆脱常见的“一体式”Toast/Snackbar 用法,因为添加侦听器会返回void。
我个人发现 OnAttachStateChangeListener 可以满足我的需求。
用我的代码删除一个狙击手,以防它对你有用。
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();
请注意,这只是我自己的问题的实现,带有 postDelayed Runnable 的 Handler 甚至可能不适合您的情况。这只是为了大致了解我建议使用我已经拥有的代码段的实现。