How can I Implement drag and drop functionality using Airbnb's Epoxy model?

267 views Asked by At

I want to code this todo() part to perform drag and drop using Airbnb's Epoxy Library, I have this method onModelMoved() which I am not able to think what to code or approach need help !

EpoxyTouchHelper.initDragging(controller)
        .withRecyclerView(binding.epoxyRecyclerView)
        .forVerticalList()
        .withTarget(HomeEpoxyController.ItemEntityEpoxyModel::class.java)
        .andCallbacks(object :
            EpoxyTouchHelper.DragCallbacks<HomeEpoxyController.ItemEntityEpoxyModel>() {
            override fun onModelMoved(
                fromPosition: Int,
                toPosition: Int,
                modelBeingMoved: HomeEpoxyController.ItemEntityEpoxyModel?,
                itemView: View?
            ) {
                // todo()
            }
        })

Below is my data class inside HomeEpoxyController if it can help you with something

 data class ItemEntityEpoxyModel(
    val itemEntity: ItemEntity,
    val itemEntityInterface: ItemEntityInterface
) : ViewBindingKotlinModel<ModelItemEntityBinding>(R.layout.model_item_entity) {
    override fun ModelItemEntityBinding.bind() {
        titleTextView.text = itemEntity.title

        if(itemEntity.description == null){
            descriptionTextView.isGone = true
        }else{
            descriptionTextView.isVisible = true
            descriptionTextView.text = itemEntity.description
        }

        deleteImageView.setOnClickListener {
            itemEntityInterface.onDeleteItemEntity(itemEntity)
        }
        priorityTextView.setOnClickListener {
            itemEntityInterface.onBumpPriority(itemEntity)
        }

        val colorRes = when(itemEntity.priority){
            1 -> android.R.color.holo_green_dark
            2 -> android.R.color.holo_orange_dark
            3 -> android.R.color.holo_red_dark
            else -> R.color.purple_500
        }

        priorityTextView.setBackgroundColor(ContextCompat.getColor(root.context,colorRes))
    }

}
1

There are 1 answers

0
ono On

you need to update your list where the todo is. for example, Collections.swap(yourList, fromPosition, toPosition)