Закусочная: как определить, какая закуска показана

У меня есть recyclerview, который реализует макет swipetorefresh – если вы проведите пальцем по списку, он загрузит новые сообщения. У него также есть onloadmorelistener который служит для разбивки моего recyclerview – если вы проведите пальцем по recyclerview, он загрузит более старые сообщения.

Я пытаюсь создать уведомление о snackbar где, если пользователь находится в автономном режиме, и он пытается завершить какой-либо сетевой активности, например, загружать старые или новые сообщения, появится закусочная, говорящая ему, что есть «Нет Интернета».

В случае отсутствия Интернета, и пользователь перебирает и перескакивает на recyclerview, отображается два уведомления о закусках, отображающих одно и то же сообщение «Нет Интернета». На самом деле я просто хочу, чтобы на нем показывали.

Поэтому я ищу уникальный способ идентифицировать текст, который отображается в закусочной, так что, если текст одинаковый в обеих закусочных, отображается только одна getText() но в getText() нет getText() и есть setText() : http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.html

Я также вижу, что есть методы обратного вызова: http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.Callback.html, но ни один из них, похоже, не помогает в моем сценарии.

Хотелось бы, чтобы был уникальный флаг, который я мог бы Snackbar.make к Snackbar.make когда он был создан для целей идентификации, но метод Snackbar.make этого не позволяет.

Кто-нибудь был успешным в решении проблемы, подобной этому?

Используйте обратный вызов snackbar. Когда он отображается, добавьте его в список, например, затем, когда вызывается обратный вызов, удалите его, так что у вас есть только видимые snackbars. Пример обратного вызова:

 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) { ... } }); 

Я постараюсь поставить то, что сказал Хельми по коду

 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(); } }