Как добавить макет с красным фоновым цветом при перелистывании для удаления в RecyclerView - PullRequest
0 голосов
/ 04 октября 2019

У меня есть просмотрщик, который имеет swipeToDeleteHandler:

private fun swipeToDeleteHandler() {
    simpleItemTouchCallback = object : ItemTouchHelper.SimpleCallback(
        0,
        ItemTouchHelper.LEFT
    ) {

        override fun onMove(
            recyclerView: RecyclerView,
            viewHolder: RecyclerView.ViewHolder,
            target: RecyclerView.ViewHolder
        ): Boolean {
            Toast.makeText(this@MainActivity, "on Move", Toast.LENGTH_SHORT).show()
            return true
        }

        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, swipeDir: Int) {
            Toast.makeText(this@MainActivity, "Removed! ", Toast.LENGTH_SHORT).show()
            //Remove swiped item from list and notify the RecyclerView
            deleteRowFromDb(viewHolder.adapterPosition + 1)
            //adapter.notifyItemChanged(viewHolder.adapterPosition)
        }
    }
}

, который удаляет из моей базы данных SQLi строку, которую пользователь ударил. Проблема в том, , какой самый эффективный способ добавить красный фон со значком корзины, когда пользователь проводит пальцем, чтобы удалить строку ? В наши дни это наблюдается в большинстве приложений.

1 Ответ

0 голосов
/ 04 октября 2019

Если все, что вам нужно сделать, это просто удалить элемент при смахивании, самый простой способ - нарисовать его на ItemTouchHelper.SimpleCallback

override fun onChildDraw(canvas, recyclerView, viewHolder, ..) {
    val itemView = viewHolder.itemView
    val itemHeight = itemView.bottom - itemView.top

    // Draw the red delete background
    background.color = backgroundColor
    background.setBounds(
            itemView.right + dX.toInt(),
            itemView.top,
            itemView.right,
            itemView.bottom
    )
    background.draw(canvas)

    // Calculate position of delete icon
    val iconTop = itemView.top + (itemHeight - inHeight) / 2
    val iconMargin = (itemHeight - inHeight) / 2
    val iconLeft = itemView.right - iconMargin - inWidth
    val iconRight = itemView.right - iconMargin
    val iconBottom = iconTop + inHeight

    // Draw the delete icon
    icon.setBounds(iconLeft, iconTop, iconRight, iconBottom)
    icon.draw(canvas)

    super.onChildDraw(canvas, recyclerView, viewHolder, ...)
}

Исходная тема

Нонапример, если вам нужно больше, чем просто удалить элемент с помощью пальца, вам нужны две кнопки, такие как «Удалить» и «Редактировать», вы можете использовать сторонние библиотеки, такие как This One

...