У меня есть следующий код для обработки опции перетаскивания для RecyclerView.
class TodoActivity : AppCompatActivity() {
lateinit var adapter: ToDoItemAdapter
lateinit var touchHelper: ItemTouchHelper
var list: ToDoList? = null
override fun onCreate(savedInstanceState: Bundle?) {
.....
rv_item_list.layoutManager = LinearLayoutManager(this)
.....
touchHelper =
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, 0) {
override fun onMove(
rv: RecyclerView,
dragged: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
val dragged_item_pos = dragged.adapterPosition
val target_item_pos = target.adapterPosition
Collections.swap(list.items, dragged_item_pos, target_item_pos)
adapter.notifyItemMoved(dragged_item_pos, target_item_pos)
return false
}
override fun onSwiped(p0: RecyclerView.ViewHolder, p1: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
touchHelper.attachToRecyclerView(rv_item_list)
}
class ToDoItemAdapter(val context: Context, val activity: TodoActivity) :
override fun onBindViewHolder(holder: ViewHolder, pos: Int) {
holder.cb_completed.setOnClickListener {
.....
}
}
}
}
Не перетаскивая какой-либо элемент, я попытался установить флажок, который работает нормально.Теперь проблема в том, что после перетаскивания элементов, если я проверяю элемент, он вызывает флажок, который был там ранее.
Например:
I have Item 1, Item 2, Item 3.
I dragged the Item 3 to Item 1 position.
Now the order is Item 3, Item 1, Item 2
If I check Item 3(Position 0), Its checking Item 2(Position 2). Because currently Item 2 has the position of previous Item 3 position.