최근에 스크롤하고 Snackback을 표시 할 때이 문제를 직접 발견했습니다. 첫 번째 항목이 사라지기도 전에 너무 많이 표시되었습니다. 앱이 스낵바를 설치해야하는지 알 수있는 방법을 찾아야했습니다.
개인적으로이 해결책을 찾았습니다.
사실 Snackbar 자체는 상태 / 가시성에 대한 리스너를 제공하지 않지만 Snackbar (getView ();)에서 View Object를 가져올 수 있습니다. View Object에서 다양한 메서드를 사용하여 리스너를 추가 할 수 있습니다.
이를 구현하려면 리스너를 추가하면 void를 반환하므로 일반적인 "일체형"Toast / Snackbar 사용에서 벗어나야합니다 .
개인적으로 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이있는 Handler는 귀하의 경우에도 적합하지 않을 수 있습니다. 내가 이미 소유 한 스 니펫을 사용하여 제안한 구현에 대한 일반적인 아이디어를 제공하기위한 것입니다.