Intereting Posts
Phonegap Android и GPS-спутник ListView не обновляется до тех пор, пока клавиатура не будет скрыта Youtube Загрузите список видео. Ошибка FileNotFound Мониторинг использования приложений приложений Ionic 2 dev и переменные среды prod MediaPlayer.setDataSource (String) не работает с локальными файлами Возможно ли удаленно размещать ресурс, используемый в приложении для Android, таким образом, что его можно использовать только моим приложением? Невозможно извлечь скрытый показатель для Android KeyStore HelloWorld не может работать под dalvikvm Как отлаживать разрешения Android 6.0? Android, Gradle. Как создать приложение и запустить тесты из тестового приложения Android Broadcast Receiver для отправленных SMS-сообщений? Загрузите черновик APK без вмешательства в опубликованный APK? Как удалить пространство между строками сетки в android Как получить ошибки консоли браузера в Android-Phonegap-приложении, возможно, в Eclipse?

Как я могу получать уведомления о том, что Snackbar уволился?

Я использую Snackbar из библиотеки com.android.support:design:22.2.0 . Я использую его для отмены удаления. Чтобы облегчить мою жизнь, я собираюсь сделать UI похожим на то, что вещи фактически удалены из источника данных, и если кнопка отмены в снэке не нажата, на самом деле выполните удаления из источника данных. Итак, я хочу знать, когда Snackbar больше не видно, поэтому безопасно удалять элементы.

Я могу вызвать getView () в Snackbar, но я не уверен, какой слушатель я должен использовать. Я попробовал setOnSystemUiVisibilityChangeListener() но это не сработало, я считаю, что это только для строки состояния системы.

Кроме того, Snackbar не может быть расширен, так как он имеет частный конструктор.

Solutions Collecting From Web of "Как я могу получать уведомления о том, что Snackbar уволился?"

Библиотека дизайна Google поддерживает обратные вызовы Snackbar в версии 23. См. Документы Snackbar и Документы обратного вызова . Затем вы получите уведомление, когда Snackbar будет уволен (а также, если он показан), а также тип увольнения, если это вам полезно:

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

Недавно я наткнулся на этот вопрос сам, когда для прокрутки и показа Снежки, слишком много было показано, пока первый даже не исчез. Мне нужно было найти способ узнать, должно ли приложение заложить закусочную.

Я лично нашел это решение.

Это правда, что Snackbar сам не предлагает никакого слушателя для его состояния / видимости, но вы все равно можете получить View Object из Snackbar (getView ();). Из объекта View вы можете использовать самые разные методы для добавления слушателей.

Чтобы реализовать это, вы должны выйти из общего использования «все в одной строке» 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(); 

Обратите внимание, что это только моя реализация для моей собственной проблемы, Handler с postDelayed Runnable может даже не соответствовать вашему делу. Это было просто дать общее представление о реализации, которую я предложил использовать уже имеющийся у меня фрагмент.

Чтобы быть уведомленным о том, что snackbar был показан или уволен, вы можете предоставить Snackbar.Callback через setCallback (Callback).

  snackbar.setCallback(new Snackbar.Callback() { @Override public void onDismissed(Snackbar snackbar, int event) { if (event == Snackbar.Callback.DISMISS_EVENT_TIMEOUT) { // Snackbar closed on its own } } @Override public void onShown(Snackbar snackbar) { ... } }); 

В настоящее время нет способа получить уведомление при завершении показа Snackbar.

В этом потоке обходное решение обсуждается на основе таймера на протяжении всего экрана Snackbar. Закусочная в библиотеке поддержки не включает OnDismissListener ()?

Одна из проблем, которые следует учитывать при использовании этого обходного пути, – это то, что продолжительность Снекбара перезапускается. Спецификация материала для Snackbar говорит, что это произойдет, если будет отображаться несвязанный диалог или всплывающее окно.

В настоящее время вы не можете этого достичь.

При прослушивании закуски не слышен слушатель.

Самый простой способ сделать это – временно сохранить запись в другом месте (даже локальную переменную), а затем повторно вставить ее, если они попадут в кнопку отмены.