Snackbar: cómo identificar qué snackbar se muestra

Tengo un recyclerview que implementa el diseño swipetorefresh – si desliza el dedo por la lista, se cargará nuevos mensajes. También tiene un onloadmorelistener que sirve para paginar mi recyclerview – si usted desliza su dedo encima del recyclerview, cargará postes más viejos.

Estoy tratando de construir en una notificación de snackbar donde si el usuario está fuera de línea e intenta completar algún tipo de actividad en la red, como cargar mensajes antiguos o nuevos, aparecerá el snackbar diciéndole que no hay "Internet".

En el caso en que no hay Internet y el usuario se desliza y se desliza hacia abajo en el reciclerview, dos notificación de snackbar que muestra el mismo mensaje "No Internet" se muestra. En realidad sólo quiero que se muestre uno en su lugar.

Por lo tanto, estoy buscando alguna forma única de identificar el texto que se muestra en la barra de bocadillos para que si el texto es el mismo en ambos snackbar, sólo se muestra un snackbar, pero no hay método getText() en snackbar y hay sólo setText() : http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.html

También veo que hay métodos de devolución de llamada: http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.Callback.html pero ninguno de los cuales parece ayudar en mi escenario.

Ojalá hubiera una bandera única que podría haber dado a la cafetería cuando se creó para fines de identificación, pero el método Snackbar.make no lo permite.

¿Alguien ha tenido éxito en la solución de un problema similar a esto?

Utilice la llamada de atención. cuando se muestra agregar a una lista, por ejemplo, a continuación, cuando se llama la devolución de llamada, quítelo, por lo que sólo tiene todavía snackbars visible. ejemplo de devolución de llamada:

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

Voy a tratar de poner lo que Helmi dijo en el código

 private Map<String, String> snackbarList = new HashMap<>(); private CoordinatorLayout mCoordinatorLayout; private void displaySnackbarIfNotShown(String snackbarText) { //Check if the snackbar is already on the list if(snackbarList.containsKey(snackbarText)){ //Snackbar already exist, you may update its text or ignore it } else { Snackbar mySnackbar = Snackbar.make(mCoordinatorLayout, R.string.prompt_adjust_map, Snackbar.LENGTH_INDEFINITE); mySnackbar.setCallback(new Snackbar.Callback() { @Override public void onDismissed(Snackbar snackbar, int event) { //Remove from the snackbar list snackbarList.remove(snackbarText); } @Override public void onShown(Snackbar snackbar) { //Add to the snackbar list snackbarList.put(snackbarText, ""); } }); mySnackbar.show(); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.