У меня есть два фрагмента:
- SpendingFragment
- PurchaseGoalsFragment
Ожидаемое поведение: >
После смахивания элемента в любом фрагменте элемент должен немедленно вернуться в исходное состояние (без удаления элемента). Это должно происходить независимо от того, какой фрагмент виден в данный момент.
Фактическое поведение:
Элемент во фрагменте, которого в данный момент нет в фокус остается перенесенным и не возвращается в исходное положение, даже если notifyItemChanged(position) вызывается в методе onSwiped. Такое поведение во всех фрагментах непоследовательно.

Я использую собственный класс SwipeToDelete, который расширяет ItemTouchHelper.SimpleCallback. Вот упрощенная версия этого класса:
Код: Выделить всё
class SwipeToDelete(
private val swipableAdapter: SwipableAdapter,
private val icon: Drawable?, // Background Icon
private val backgroundColor: Int, // Background Color
private val cornerRadius: Float // Corner radius for the card
) : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
private val paint = Paint().apply {
color = backgroundColor
isAntiAlias = true
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.adapterPosition
swipableAdapter.onSwiped(position)
}
}
Код: Выделить всё
interface SwipableAdapter {
fun onSwiped(position: Int)
}
Код: Выделить всё
class PurchaseGoalsAdapter(
private val goals: MutableList
,
private val moneyBox: MoneyBox
) : RecyclerView.Adapter(), SwipableAdapter {
// ... (other code)
override fun onSwiped(position: Int) {
notifyItemChanged(position)
println("PurchaseGoals adapter swiped: $position")
}
// Other methods...
}
Код: Выделить всё
class SpendsAdapter(private val spendsList: List, private val moneyBox: MoneyBox) :
RecyclerView.Adapter(), SwipableAdapter {
// ... (other code)
override fun onSwiped(position: Int) {
println("Spends adapter swiped: $position")
notifyItemChanged(position)
}
// Other methods...
}
Код: Выделить всё
2024-10-05 15:25:52.635 11061-11061 System.out I PurchaseGoals adapter swiped: 0
2024-10-05 15:25:56.185 11061-11061 System.out I Spends adapter swiped: 0
Подробнее здесь: https://stackoverflow.com/questions/790 ... -viewpager