java - RecyclerView 滑动而不删除项目

标签 java android kotlin android-recyclerview

我想对 RecyclerView 中的滑动执行一些操作。为此,我使用 ItemTouchHelper.SimpleCallback。

但是当我滑动时,一个项目会从我的 RecyclerView 中消失。

我该如何解决?我想显示一些滑动动画并调用 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 字段来做到这一点,该字段将包含有关是否可滑动查看的信息,并且在 onSwiped 方法上将其设置为 false,并使用方法 translateX(0) 将项目动画化为原始 x,如果您也可以使用 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;
        }
    }

};

关于java - RecyclerView 滑动而不删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983573/

相关文章:

Java Try-Catch 异常计算器

java - 如何验证具有重复子元素作为 ID 唯一标记的 xml?

spring-boot - 由于 java.lang.IllegalStateException : No suitable default ClientHttpConnector found 无法构建 Spring webClient

java - 带有空值的 Couchbase lite 复合键范围

java - Spring Data 与 JPA 2.2 resultStream 到 Kotlin 的 Flow

java - java实现下拉刷新的方法

Java - 使用泛型或继承

android - 在 Eclipse 中使用 Proguard for Android 出错

android - 如何在不使用自定义 View 的情况下将操作栏标题对齐到中心

安卓语音指令自定义