リスト項目で実行できるさまざまなアクションを追加した RecyclerView があります。特に、DragDrop
およびSwipeDismiss
。DragDrop
長押しでSwipeDismiss
開始され、スワイプで開始されます。これらのアクションが発生しないようにするには、スクロール イベントを監視する必要があります。スクロールするのが面倒で、突然ドラッグに切り替わりました。これを処理するために を追加する前にOnScrollListener
。
これは私が以前にしたことです:
@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 を追加しました。上にスクロールすると、ツールバーが折りたたまれるまで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
ですか? 行動は正しい方法ですか?