在 RecyclerView android 中拖放期间面临位置值问题

2024-04-23

如何在 RecyclerView 适配器中拖放时获取新的位置值?

拖放工作正常,但是当我设置 setOnClickListener 打开我的详细活动时。它给了我旧的位置值。

例如 :

如果我拖动第二个项目(INDEX 1)并放在第一个项目的位置(INDEX 0)。

当我调用 Intent 时,在 setOnClickListener 内进行调试。位置值为 1 (INDEX 1),但我需要的是值 0 (INDEX 0)。

 @Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
    holder.textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(activity, DetailActivity.class);
                intent.putExtra("NAME_POSITION", position);
                intent.putParcelableArrayListExtra("NAME_LIST", mName);
                ((Activity) context).startActivityForResult(intent, 800);
        }
 }
  • 对于拖放,我创建了 2 个类。

    1) CustomItemTouchHelper 扩展 ItemTouchHelper.Callback

class

//Interface interface

public ItemTouchHelper(Interface interface) {
    this.interface = interface;
}

@Override
public boolean isLongPressDragEnabled() {
    return true;
}

@Override
public boolean isItemViewSwipeEnabled() {
    return false; // swiped disabled
}

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; // movements drag
    return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, dragFlags); // as parameter, action drag and flags drag
}

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    interface.onMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); // information to the interface
    return true;
}

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

2)OnMove方法的接口

void onMove(int oldPosition, int newPosition);

在activity中实现了这个方法

    ItemTouchHelper.Callback callback = new CustomItemTouchHelper(this);
    ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
    touchHelper.attachToRecyclerView(list);

Activity 中实现的接口。

onMove(int oldPosition, int newPosition) {
  Collections.swap(mNames, oldPosition, newPosition);
  adapter.notifyItemMoved(oldPosition, newPosition);
}
  • 如果缺少某些内容,请纠正或指导我。
  • 感谢和问候。

确保重写 getItemId() 方法,该方法在适配器上返回唯一值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 RecyclerView android 中拖放期间面临位置值问题 的相关文章

随机推荐