标签: itemtouchhelper

如何创建RecyclerView拖放(交换2个项目位置版本)

我有 ItemTouchHelper 类,它使用滑动和拖放来执行操作。但我想改变拖放行为。它应该交换 2 个元素的位置,第一个元素是我拖动的,另一个元素是放置在其上的。我想交换拖放位置的项目。不要改变两者之间所有项目的位置。

怎么做

这是我的拖放课程

public class ItemTouchHelper extends 
androidx.recyclerview.widget.ItemTouchHelper.Callback {

private Drawable icon;
private Context context;
private ColorDrawable background;
private final ItemTouchHelperListener dragDropListener;

public ItemTouchHelper(Context context, Drawable icon,
                       ItemTouchHelperListener dragDropListener) {
    this.icon = icon;
    this.dragDropListener = dragDropListener;
    this.context = context;
    this.background = new ColorDrawable(context.getResources().getColor(R.color.deleteItem));
}

@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                        @NonNull RecyclerView.ViewHolder viewHolder,
                        float dX, float dY,
                        int actionState, boolean isCurrentlyActive) {
    super.onChildDraw(c, recyclerView, viewHolder, dX,
            dY, actionState, isCurrentlyActive);
    View itemView = viewHolder.itemView; …
Run Code Online (Sandbox Code Playgroud)

java android drag-and-drop android-recyclerview itemtouchhelper

4
推荐指数
2
解决办法
5464
查看次数

ItemTouchHelper,滑动删除画布中的文本

我们正在 RecyclerView 中实现 ItemTouchHelper,当我们在 RV 中向左滑动时,我们正在覆盖 onChildDraw,问题是,如果我有一个 X 大小的 RecyclerView,我尝试关闭 2、3、4 或5 个元素,唯一一个显示文本的是 List 中的第一个元素,但是,如果是图像,它工作得很好

@Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        if (viewHolder.getAdapterPosition() == -1)
            return;
        View itemView = viewHolder.itemView;
        Paint paint = new Paint();
        paint.setColor(Color.WHITE);
        paint.setTextSize(40);
        paint.setTextAlign(Paint.Align.CENTER);
        String inbox = itemView.getContext().getResources().getString(R.string.sendinbox);
        c.drawText(inbox, itemView.getRight() - 200, itemView.getHeight()/2, paint);
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview itemtouchhelper

3
推荐指数
1
解决办法
1433
查看次数

在使用 itemtouchhelper 滑动删除之前确认对话框

如何在使用 ItemTouchHelper 删除 Recyclerview 项目之前显示确认对话框。我创建了 RecyclerView 并实现了基本的 ItemTouchHelper.Callback 类。但是,我不知道接下来要做什么。

我创建了下面的类并将其附加到 Recyclerview。刷出项目有效。但我想在项目移动之前显示确认对话框。

class SwipeController extends Callback {

    public SwipeController( ) {

    }

    @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        return makeMovementFlags(0, START);
    }

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

    }
}
Run Code Online (Sandbox Code Playgroud)

android itemtouchhelper

3
推荐指数
2
解决办法
3989
查看次数

Recyclerview 拖放触摸

我曾经ItemTouchHelperrecyclerview. 它工作正常。但它仅适用于长按。我需要这样做onTouch

ItemTouchHelper.Callback itemTouchHelperCallback = new ItemTouchHelper.Callback() {
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        Collections.swap(strings, viewHolder.getAdapterPosition(), target.getAdapterPosition());
        adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
        return true;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        //TODO
    }

   //defines the enabled move directions in each state (idle, swiping, dragging).
     @Override
     public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
         return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
             ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.START | ItemTouchHelper.END);
         }
    };
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码。请帮我!!!

android android-recyclerview itemtouchhelper

3
推荐指数
1
解决办法
3262
查看次数

由于recyclerview拖放的变化,如何更新ArrayList中的所有项目

RecyclerView的布局是GridLayout3列。我正在使用ItemTouchHelper拖放GridLayoutRecyclerView。在我的适配器中,有一种方法onItemMove()可以通知我我已移动的物品。它只交换那些ArrayList我拖放过的项目。但是由于拖放,其他元素也会发生变化。我也想更新他们在中的职位ArrayList

这是我的Recyclerview的适配器:

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.MyViewHolder> implements com.sagar.quizdemo.helper.ItemTouchHelperAdapter {
    String[] str = {"Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6", "Level 7", "Level 8", "Level 9"};
    List<String> itemList, actualList;
    LayoutInflater inflater;
    Context context;
    private final OnStartDragListener mDragStartListener;

    public GridAdapter(Context context, OnStartDragListener dragStartListener) {
        this.context = context;
        mDragStartListener = dragStartListener;
        inflater = LayoutInflater.from(context);
        itemList = new ArrayList<>();
        actualList = new ArrayList<>(Arrays.asList(str));
    } …
Run Code Online (Sandbox Code Playgroud)

java android drag-and-drop android-recyclerview itemtouchhelper

2
推荐指数
1
解决办法
1436
查看次数

如何禁用拉刷新,当刷卡回收器视图项目?

我在 SwipeRefreshLayout 中使用了 recyclerview,当我开始滑动以删除我的回收器视图项时,它将主动拉动以刷新。我想在开始滑动时禁用拉动刷新并启用完整的滑动。我使用 ItemTouchHelper 类来检测滑动动作

这是我的 .xml 文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout 
   android:id="@+id/swipeRefreshLayout"       
   android:layout_width="match_parent"
   android:layout_height="match_parent">

  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

      <androidx.recyclerview.widget.RecyclerView
          android:id="@+id/recyclerView"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

    </RelativeLayout>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
Run Code Online (Sandbox Code Playgroud)

而且,这个Java文件,

 new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {

        }
    }).attachToRecyclerView(recyclerView);
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview recyclerview-layout itemtouchhelper

2
推荐指数
1
解决办法
1231
查看次数

如何使用 ItemTouchHelper.Callback 在水平回收视图的边界上拖放项目?

我想将项目拖到我的水平 recyclerview 上(不仅在 recyclerview 的范围内),当放下一个项目时,它会通过动画移动到新位置。如何使用 ItemTouchHelper.Callback 实现这一点?

android drag-and-drop android-recyclerview itemtouchhelper

1
推荐指数
1
解决办法
1005
查看次数

如何有选择地设置 itemTouchHelper 滑动?

所以我在 recyclerview rv 上实现了这个 itemtouchhelper.simple 回调。

现在在这个 rv 中,我根据内容类型将 2 种布局设置为一行。

所以当我在 rv 上设置这个 touchhelper 时,它正在这两种布局上实现,即使我不想这样做。我只想将这种滑动应用于这种布局的一种类型。

ItemTouchHelper.SimpleCallback ith = new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
            if(viewHolder.itemView.findViewById(R.id.messageholder_from) != null)
            {
                Log.d("texts", "onSwiped: "+viewHolder.itemView.findViewById(R.id.messageholder_from).findViewById(R.id.crfrom));
            }
            adapter.notifyDataSetChanged();
        }
    };
    new ItemTouchHelper(ith).attachToRecyclerView(rv);
Run Code Online (Sandbox Code Playgroud)

如您所见,此代码我只想在包含此 messageholder_from 子项的行上实现滑动,否则我不想实现滑动。

有什么方法可以删除另一个子 messageholder_to 上的滑动动画和侦听器。

我的应用程序根据消息 ID 显示 to_layout 或 from_layout。

感谢您提供任何帮助。

android swipe android-recyclerview itemtouchhelper

1
推荐指数
1
解决办法
1611
查看次数

RecyclerView 滑动删除仍然显示可绘制但未完成滑动

我的 RecyclerView 使用 ItemTouchHelper 启用向右滑动功能,如下所示

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(createHelperCallback());
itemTouchHelper.attachToRecyclerView(myRecyclerView);

private ItemTouchHelper.Callback createHelperCallback() {
    return new ItemDragSwipeCallback(this, R.color.swipe_delete, R.drawable.ic_delete_black_24dp,
            0, ItemTouchHelper.RIGHT, new ItemDragSwipeCallback.OnTouchListener() {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            // delete code
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

自定义 ItemTouchHelper.SimpleCallback

public class ItemDragSwipeCallback extends ItemTouchHelper.SimpleCallback {


    private Drawable mIcon;
    private final ColorDrawable mBackground;

    public interface OnTouchListener {
        boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target);

        void onSwiped(RecyclerView.ViewHolder …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview itemtouchhelper

0
推荐指数
1
解决办法
2035
查看次数