Skip to content

Commit de176e8

Browse files
committed
Avoid jumping around when items are sorted
1 parent f35767c commit de176e8

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

app/src/main/kotlin/org/fossify/clock/adapters/TimerAdapter.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ import org.fossify.clock.models.TimerEvent
1616
import org.fossify.clock.models.TimerState
1717
import org.fossify.commons.adapters.MyRecyclerViewListAdapter
1818
import org.fossify.commons.dialogs.PermissionRequiredDialog
19-
import org.fossify.commons.extensions.*
19+
import org.fossify.commons.extensions.adjustAlpha
20+
import org.fossify.commons.extensions.applyColorFilter
21+
import org.fossify.commons.extensions.beInvisibleIf
22+
import org.fossify.commons.extensions.getColoredDrawableWithColor
23+
import org.fossify.commons.extensions.getFormattedDuration
24+
import org.fossify.commons.extensions.openNotificationSettings
2025
import org.fossify.commons.views.MyRecyclerView
2126
import org.greenrobot.eventbus.EventBus
2227

@@ -41,6 +46,24 @@ class TimerAdapter(
4146

4247
init {
4348
setupDragListener(true)
49+
setHasStableIds(true)
50+
}
51+
52+
override fun getItemId(position: Int): Long {
53+
return getItem(position).id!!.toLong()
54+
}
55+
56+
override fun submitList(list: MutableList<Timer>?, commitCallback: Runnable?) {
57+
val layoutManager = recyclerView.layoutManager!!
58+
val recyclerViewState = layoutManager.onSaveInstanceState()
59+
super.submitList(list) {
60+
layoutManager.onRestoreInstanceState(recyclerViewState)
61+
commitCallback?.run()
62+
}
63+
}
64+
65+
override fun submitList(list: MutableList<Timer>?) {
66+
submitList(list, null)
4467
}
4568

4669
override fun getActionMenuId() = R.menu.cab_alarms

0 commit comments

Comments
 (0)