拖放操作无法正常进行,只有选定的项目在移动其他物品不能顺畅移动

问题描述

我目前正在研究如何使用AAC和MVVM模式。我正在通过拖放进行recyclerview。但是只有选定的项目被移动。其他是固定的。这是描述问题的图像。 enter image description here

我的适配器不是RecyclerView.Adpater,而是ListAdapter。我使用数据绑定,LiveData和ViewModel。这是我的代码。有什么问题??我不知道问题出在哪里。另外,我不确定如何在适配器的onItemMove函数中交换两个项目。 onItemMove函数的代码不清楚。

ItemTouchHelper

class ItemMoveCallback(private val adapter: TodoAdapter) : ItemTouchHelper.Callback() {
    override fun getMovementFlags(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder): Int {
        val mFlag = ItemTouchHelper.UP or ItemTouchHelper.DOWN
        val sFlag = ItemTouchHelper.END or ItemTouchHelper.START
        return makeMovementFlags(mFlag,sFlag)
    }

    override fun onMove(
        recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder
    ): Boolean {
        //adapter.onItemMove(viewHolder.adapterPosition,target.adapterPosition)
        return true
    }


    override fun isLongPressDragEnabled(): Boolean {
        return true
    }

}

适配器

class TodoAdapter(application: Application): ListAdapter<Todo,TodoAdapter.ViewHolder>(TodoDiffUtil) {
    private val viewModel = MainViewModel(application)

    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        val binding =
            DataBindingUtil.inflate<ItemTodoBinding>(layoutInflater,viewType,parent,false)
        return ViewHolder(binding)
    }

    override fun getItemViewType(position: Int): Int {
        return R.layout.item_todo
    }

    override fun getItemCount(): Int {
        return super.getItemCount()
    }


    override fun onBindViewHolder(holder: ViewHolder,position: Int) {
        val todo = getItem(position)
        holder.bind(todo)
    }

    @Override
    fun onItemMove(startPos:Int,endPos:Int) {
        val temp = getItem(startPos).id
        getItem(startPos).id = getItem(endPos).id
        getItem(endPos).id = temp

        viewModel.viewModelScope.launch ( Dispatchers.IO ){
            viewModel.itemSwap(getItem(startPos),getItem(endPos))
        }
    }


    inner class ViewHolder(private val binding: ItemTodoBinding) :
        RecyclerView.ViewHolder(binding.root) {
        fun bind(todo: Todo) {
            binding.todo = todo
            binding.executePendingBindings()
        }

    }

    companion object TodoDiffUtil : DiffUtil.ItemCallback<Todo>() {
        override fun areItemsTheSame(oldItem: Todo,newItem: Todo): Boolean {
            return oldItem == newItem
        }

        override fun areContentsTheSame(oldItem: Todo,newItem: Todo): Boolean {
            return oldItem == newItem
        }
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...