Recientemente me topé con este asunto cuando, para desplazarme y mostrar Snackback, se mostraron demasiados antes de que el primero desapareciera. Tenía que encontrar una manera de saber si la aplicación debería haber establecido la barra de bocadillos.
Yo personalmente encontré esta solución.
Es cierto que Snackbar en sí no ofrece ningún tipo de oyente para su estado / visibilidad, pero aún puede obtener el objeto de visualización de Snackbar (getView ();). Desde el objeto de vista, tiene la oportunidad de utilizar una amplia variedad de métodos para agregar oyentes.
Para implementarlo, debe salirse del uso común de Toast / Snackbar "todo en una línea", porque agregar oyentes devuelve void .
Personalmente encontré OnAttachStateChangeListener para satisfacer mis necesidades.
Dejando caer un snipper con mi código en caso de que pueda resultarle útil.
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();
Tenga en cuenta que esta es solo mi implementación para mi propio problema, es posible que Handler con un postDelayed Runnable ni siquiera se ajuste a su caso. Fue solo para dar una idea general de la implementación que sugerí usando un fragmento que ya tengo.