最近,当我滚动和显示Snackback时,我自己偶然发现了这个问题,在第一个甚至消失之前,显示了太多内容。我必须找到一种方法来了解应用程序是否应该放下Snackbar。
我个人找到了这个解决方案。
确实,Snackbar本身不提供任何类型的状态/可见性侦听器,但是您仍然可以从Snackbar(getView();)中获取View Object。在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可能甚至不适合您的情况。只是为了给出我建议使用已经拥有的代码片段的实现的一般概念。