У меня есть RecyclerView, где я добавил различные действия, которые могут выполняться в элементах списка. В частности, DragDrop
и SwipeDismiss
. DragDrop
инициируется длинным нажатием, а SwipeDismiss
инициируется путем прокрутки. Я должен следить за событиями прокрутки, чтобы заблокировать эти действия. Это раздражает прокрутка, после чего он внезапно переключился на перетаскивание. До этого я бы добавил OnScrollListener
, чтобы справиться с этим.КоординаторLayout с RecyclerView: onScroll
Это то, что я делал раньше:
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if(newState == RecyclerView.SCROLL_STATE_IDLE){
drag.setCurrentAction(IDLE);
} else {
drag.setCurrentAction(SCROLL);
}
}
больше не будет работать
Я недавно добавил CoordinatorLayout for collapsable toolbars. Теперь, когда прокрутка вверх, drag
не будет установлена в SCROLL
, пока панель инструментов не рухнет. Я попытался создать свое собственное поведение, но это заменит мое текущее поведение, которое я использую; @string/appbar_scrolling_view_behavior
. Это удалило поведение, которое я хотел для панели инструментов, и не работал, чтобы уведомить мое состояние drag
.
То, что я пробовал:
@Override
public boolean onStartNestedScroll(CoordinatorLayout cl, CollapsingToolbarLayout child, View directTargetChild,
View target, int nestedScrollAxes) {
if (nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL) {
if (drag.getCurrentAction().ordinal() < SCROLL.ordinal()) {
/* No actions have started and we are scrolling. set the new action */
drag.setCurrentAction(SCROLL);
}
return true;
}
return super.onStartNestedScroll(cl, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, CollapsingToolbarLayout child, View target) {
super.onStopNestedScroll(coordinatorLayout, child, target);
if (drag.getCurrentAction() == SCROLL) {
drag.setCurrentAction(INVALID);
}
}
Так что мой вопрос
Как я слушаю те изменения прокрутки на мой взгляд ресайклера, которые перехватываются в CoordinatorLayout
? Правильно ли поведение?
Это хороший блог, но он не предлагает решение моей проблемы. Расположение координатора - это корневой вид и перехватывает мои штрихи. И это было для Swiping и Dragging, и у меня есть те, кто работает отлично. Мне нужно разрешить прокрутку, не переданную в recyclerView. –
Ну нет, у вас нет всех правильных действий: иначе у вас не было бы вопроса здесь вообще. У вас будет много, гораздо проще сэкономить время, которое у вас есть с помощью 'ItemTouchHandler', который отлично сочетается с' CoordinatorLayout' и вложенной прокруткой. – ianhanniballake
Да, здесь есть вопрос, потому что у меня нет проблем с моим ударом и перетаскиванием. Как и мой вопрос, все это работало, прежде чем я добавил рушительную панель инструментов.Схема координатора перехватывает прокрутку, прежде чем она перейдет в режим recyclerview. Я не думаю, что изменения в ресайклере могут измениться, потому что в корневом представлении все сначала затрагивается. Это должно быть в плане координатора. –