循环清扫而无需删除项目



我想在recyclerview中的滑动行动。我将itemTouchHelper.simplecallback用于此目的。

但是当我进行滑动时,一个物品从我的回收库中消失。

我该如何解决?我想显示一些刷动的动画,并在不删除项目的情况下调用onswiped((回调。

val simpleItemTouchCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {
    override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
        return false
    }
    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, swipeDir: Int) {
        val position = viewHolder.adapterPosition
        val item = (recyclerView.adapter as DashboardAdapter).getItem(position)
        if (swipeDir == ItemTouchHelper.LEFT) {
            // Close query
            ...
        } else if (swipeDir == ItemTouchHelper.RIGHT) {
            // Take query
            ...
        }
        recyclerView.adapter?.notifyDataSetChanged()
    }
}
val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)

您可以通过添加到viewholder字段来完成此操作,该字段将具有有关视图是否可滑动的信息,然后在方法上将其设置为false,并用Method translation x(0(,如果您也在垂直滑动,则可以使用Too Transaltiony(0(。如果您这样做

   private ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    @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) {
        Log.e("Swiped","Swiped");
        ((YourViewHolder) viewHolder).setSwipeable(false);
        View item = viewHolder.itemView;
        item.animate().translationX(0);
    }
    @Override
    public int getSwipeDirs(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        if(((RemarkAdapter.RemarkViewHolder) viewHolder).isSwipeable()){
            return super.getSwipeDirs(recyclerView, viewHolder);
        }
        else{
            return 0;
        }
    }
};

在将数据删除之前尝试捕获数据,然后将其放回同一位置。

所以,假设您已将字符串存储在recyclerView中:

//your array
ArrayList<String> names = new ArrayList();
//an array we will need later to store deleted name
ArrayList<String> deleted_names = new ArrayList();
names.add("inno");
names.add("anna");
names.add("john");
//your recyclerViewAdapter
recyclerAdapter = new RecyclerAdapter(names,this);
recyclerView.setAdapter(recyclerAdapter);
private ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new 
ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) 
{
@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) 
{
    Log.e("Swiped","Swiped");
    int position = viewHolder.getLayoutPosition();
    if (direction == ItemTouchHelper.RIGHT) {
        deleted_names = names.get(position);
        names.remove(position);
        recyclerAdapter.notifyItemRemoved(position);
        names.add(position,deleted_names);
        recyclerAdapter.notifyItemInserted(position);
    }
   
}
@Override
public int getSwipeDirs(@NonNull RecyclerView recyclerView, @NonNull 
RecyclerView.ViewHolder viewHolder) {
    if(((RemarkAdapter.RemarkViewHolder) viewHolder).isSwipeable()){
        return super.getSwipeDirs(recyclerView, viewHolder);
    }
    else{
        return 0;
    }
 }
};

最新更新