5

リスト項目で実行できるさまざまなアクションを追加した RecyclerView があります。特に、DragDropおよびSwipeDismissDragDrop長押しで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ですか? 行動は正しい方法ですか?

4

2 に答える 2

-1

代わりに、このブログ投稿で詳しく説明されているように、ItemTouchHelperを使用する必要があります。

などのメソッドが含まれています。

  • onMove(RecyclerView, ViewHolder, ViewHolder)
  • onSwiped(ViewHolder, int)

これにより、カスタム ビヘイビアやタッチ イベント処理を記述することなく、ドラッグ アンド ドロップやスワイプによる非表示を実装できます。

于 2015-07-11T01:47:00.827 に答える