Нещодавно я сам натрапив на це питання, коли для прокрутки та показу Snackback було показано занадто багато, перш ніж перший навіть зник. Мені довелося знайти спосіб дізнатись, чи мала програма встановлювати Snackbar.
Я особисто знайшов це рішення.
Це правда, що сама Snackbar не пропонує жодного прослуховувача для свого стану / видимості, але ви все одно можете отримати об'єкт перегляду із Snackbar (getView ();). З об’єкта перегляду ви можете використовувати широкий спектр методів для додавання слухачів.
Для його реалізації вам слід вийти із загального використання "все в одному рядку" 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 може навіть не відповідати вашому випадку. Це було лише для того, щоб дати загальне уявлення про реалізацію, яку я запропонував, використовуючи фрагмент, яким я вже володію.