web-dev-qa-db-ja.com

RecyclerViewItemTouchHelperアクションドラッグが終了しました

ユーザーが私のRecyclerViewでドラッグアンドドロップを停止したとき(ユーザーがドロップ選択したアイテムをドロップしたとき)に耳を傾ける必要があります。

ItemTouchHelperからこの情報を取得できますか?

助けてくれてありがとう

マーク:現時点では、ユーザーがまだアイテムを移動しているときだけです:)

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {
    if (source.getItemViewType() != target.getItemViewType()) {
        return false;
    }
    // Notify the adapter of the move
    mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition());
    return true;
}
17
Sebastian

[〜#〜]更新[〜#〜]

まず、canDropOverを実装することで、オブジェクトをドロップできる場所を定義できます。

@Override
public boolean canDropOver(RecyclerView recyclerView, RecyclerView.ViewHolder current, RecyclerView.ViewHolder target) {
    return current.getItemViewType() == getItemViewType();
}

使用するアダプタを更新しますonMoveこれはドラッグ操作中に複数回呼び出すことができます

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
    return true;
}

要素との相互作用が過剰になったことを検出するには、clearViewを実装します。これは、成功(アイテムの移動またはスワイプ)またはキャンセル(アイテムの移動またはスワイプ)の場合でも、任意のアクションタイプ(ドラッグまたはスワイプ)に適用されます。

@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    super.clearView(recyclerView, viewHolder);
    // Action finished
}
24
cyroxis