@@ -24,7 +24,7 @@ class DashboardAdapter(private val onUpdate: (DashboardAdapter) -> Unit) :
2424
2525 var filter: String = " "
2626
27- private lateinit var tracker: SelectionTracker <Long >
27+ private var tracker: SelectionTracker <Long >? = null
2828
2929 init {
3030 setHasStableIds(true )
@@ -37,7 +37,12 @@ class DashboardAdapter(private val onUpdate: (DashboardAdapter) -> Unit) :
3737 override fun getItemCount (): Int = itemManager.items.size
3838
3939 override fun onBindViewHolder (holder : BasicViewHolder <Item >, position : Int ) {
40- itemManager.bind(holder, filter, position, tracker.isSelected(getItemId(position)))
40+ itemManager.bind(
41+ holder,
42+ filter,
43+ position,
44+ tracker?.isSelected(getItemId(position)) ? : false
45+ )
4146 }
4247
4348 override fun getItemViewType (position : Int ): Int {
@@ -82,28 +87,28 @@ class DashboardAdapter(private val onUpdate: (DashboardAdapter) -> Unit) :
8287 return enableSelection
8388 }
8489
85- }).build()
90+ }).build().also {
91+ it.addObserver(object : SelectionTracker .SelectionObserver <Long >() {
92+ var oldSelection: List <Long >? = null
8693
87- tracker.addObserver(object : SelectionTracker .SelectionObserver <Long >() {
88- var oldSelection: List <Long >? = null
94+ override fun onSelectionChanged () {
95+ if (it.selection.toList() == oldSelection)
96+ return
8997
90- override fun onSelectionChanged () {
91- if (tracker.selection.toList() == oldSelection)
92- return
93-
94- onSelectionChanged(getSelectedElements())
95- oldSelection = tracker.selection.toList()
96- }
97- })
98+ onSelectionChanged(getSelectedElements())
99+ oldSelection = it.selection.toList()
100+ }
101+ })
102+ }
98103 }
99104
100105 fun getSelectedElements (): List <Item > {
101- return tracker.selection
102- .map { itemManager.getElementById(it) }
103- .mapNotNull { it }.toList()
106+ return tracker? .selection
107+ ? .map { itemManager.getElementById(it) }
108+ ? .mapNotNull { it }? .toList() ? : emptyList ()
104109 }
105110
106- fun clearSelection () = tracker.clearSelection()
111+ fun clearSelection () = tracker? .clearSelection()
107112
108113 private fun configureRecyclerView () = recyclerView.apply {
109114 layoutManager = itemManager.getLayoutManager(recyclerView.context)
@@ -135,10 +140,10 @@ class DashboardAdapter(private val onUpdate: (DashboardAdapter) -> Unit) :
135140 }
136141
137142 fun onSaveInstanceState (bundle : Bundle ) {
138- tracker.onSaveInstanceState(bundle)
143+ tracker? .onSaveInstanceState(bundle)
139144 }
140145
141146 fun onRestoreInstanceState (bundle : Bundle ? ) {
142- tracker.onRestoreInstanceState(bundle)
147+ tracker? .onRestoreInstanceState(bundle)
143148 }
144149}
0 commit comments