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

问题描述

我目前正在研究如何使用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 (将#修改为@)