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