Monday, 3 April 2023

How to detect and swap to Left 25% percentage and 50% percentage swapped in recycler view android

class DragAndDropAdapterForShoppingList(
    val adapter: ShoppingListAdapter,
    swipeDirs: Int,
    private val onSwapToDelete: SingleLiveData<ShoppingListContentWidget.CallToAction>
) :
    ItemTouchHelper.SimpleCallback(0, swipeDirs) {

    private var listAdapter = adapter

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

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
        Timber.log(1, "")
        onSwapToDelete.value = ShoppingListContentWidget.CallToAction.SwappedToDelete(
            (
                adapter.items[
                    viewHolder
                        .adapterPosition
                ] as ShoppingListUIItem
                )
        )
        listAdapter.deleteItem(viewHolder.adapterPosition)
    }

    override fun onChildDraw(
        c: Canvas,
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder,
        dX: Float,
        dY: Float,
        actionState: Int,
        isCurrentlyActive: Boolean,
    ) {
        val foregroundView = getForegroundView(viewHolder)
        getDefaultUIUtil().onDraw(
            c,
            recyclerView,
            foregroundView,
            dX,
            dY,
            actionState,
            isCurrentlyActive
        )
    }

    override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
        val foregroundView = getForegroundView(viewHolder)
        getDefaultUIUtil().clearView(foregroundView)
    }

    override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
        if (viewHolder != null) {
            val foregroundView = getForegroundView(viewHolder)
            getDefaultUIUtil().onSelected(foregroundView)
        }
    }

    override fun onChildDrawOver(
        c: Canvas,
        recyclerView: RecyclerView,
        viewHolder: RecyclerView.ViewHolder?,
        dX: Float,
        dY: Float,
        actionState: Int,
        isCurrentlyActive: Boolean,
    ) {
        val foregroundView = getForegroundView(viewHolder)
        getDefaultUIUtil().onDrawOver(
            c,
            recyclerView,
            foregroundView,
            dX,
            dY,
            actionState,
            isCurrentlyActive
        )
    }

    override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
        return if ((adapter.items[viewHolder.adapterPosition] is ShoppingListUIItem.SpecificItem)) {
            super.getSwipeDirs(recyclerView, viewHolder)
        } else {
            if ((adapter.items[viewHolder.adapterPosition] as ShoppingListUIItem.GenericItem).name?.isEmpty() == true ||
                (adapter.items[viewHolder.adapterPosition] as ShoppingListUIItem.GenericItem).name == null
            ) {
                0
            } else {
                super.getSwipeDirs(recyclerView, viewHolder)
            }
        }
    }

    private fun getForegroundView(viewHolder: RecyclerView.ViewHolder?): ConstraintLayout? {
        return (viewHolder as? ShoppingListGenericItemViewHolder)?.genericItemViewFrontView
            ?: (viewHolder as? ShoppingListSpecificItemViewHolder)?.specificItemFrontView
    }
}

This is my code its working fine when i swap to left and 50 percentage above its then i am getting callback but i want when i swap to delete 25% then we should Remove Text and it should stay in swapped mode and when i click on remove text then it should get call back delete please help me how we can achieve this .



from How to detect and swap to Left 25% percentage and 50% percentage swapped in recycler view android

No comments:

Post a Comment