/
GroupDragFragment.kt
75 lines (60 loc) · 2.84 KB
/
GroupDragFragment.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.drake.brv.sample.ui.fragment.group
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.drake.brv.BindingAdapter
import com.drake.brv.item.ItemExpand
import com.drake.brv.listener.DefaultItemTouchCallback
import com.drake.brv.sample.R
import com.drake.brv.sample.databinding.FragmentGroupDragBinding
import com.drake.brv.sample.model.GroupDrag1Model
import com.drake.brv.sample.model.GroupDrag2Model
import com.drake.brv.utils.linear
import com.drake.brv.utils.setup
import com.drake.tooltip.toast
class GroupDragFragment : BaseGroupFragment<FragmentGroupDragBinding>(R.layout.fragment_group_drag) {
override fun initView() {
binding.rv.linear().setup {
addType<GroupDrag1Model>(R.layout.item_group_1)
addType<GroupDrag2Model>(R.layout.item_group_3)
// 自定义部分实现
itemTouchHelper = ItemTouchHelper(object : DefaultItemTouchCallback() {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val vh = viewHolder as BindingAdapter.BindingViewHolder
vh.collapse() // 侧滑删除分组前先折叠子列表
super.onSwiped(viewHolder, direction)
// 如果侧滑删除的是分组里面的子列表, 要删除对应父分组的itemSublist数据, 否则会导致数据异常
// itemSublist必须为可变集合, 否则无法被删除
(vh.findParentViewHolder()?.getModelOrNull<ItemExpand>()?.itemSublist as? ArrayList)?.remove(vh.getModelOrNull())
}
override fun onMove(
recyclerView: RecyclerView,
source: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
// 拖拽分组前先折叠子列表
(source as BindingAdapter.BindingViewHolder).collapse()
(target as BindingAdapter.BindingViewHolder).collapse()
return super.onMove(recyclerView, source, target)
}
})
R.id.item.onFastClick {
when (itemViewType) {
R.layout.item_group_2, R.layout.item_group_1 -> {
val changeCount =
if (getModel<ItemExpand>().itemExpand) "折叠 ${expandOrCollapse()} 条" else "展开 ${expandOrCollapse()} 条"
toast(changeCount)
}
}
}
}.models = getData()
}
private fun getData(): MutableList<GroupDrag1Model> {
return mutableListOf<GroupDrag1Model>().apply {
repeat(4) {
add(GroupDrag1Model())
}
}
}
override fun initData() {
}
}