Commit 8ee93312 authored by Mygod's avatar Mygod

Improve performance of reordering profiles

parent 870fd9e6
...@@ -223,6 +223,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -223,6 +223,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
inner class ProfilesAdapter : RecyclerView.Adapter<ProfileViewHolder>() { inner class ProfilesAdapter : RecyclerView.Adapter<ProfileViewHolder>() {
internal val profiles = ProfileManager.getAllProfiles()?.toMutableList() ?: mutableListOf() internal val profiles = ProfileManager.getAllProfiles()?.toMutableList() ?: mutableListOf()
private val updated = HashSet<Profile>()
init { init {
setHasStableIds(true) // see: http://stackoverflow.com/a/32488059/2245107 setHasStableIds(true) // see: http://stackoverflow.com/a/32488059/2245107
...@@ -252,13 +253,17 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -252,13 +253,17 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
next.userOrder = previousOrder next.userOrder = previousOrder
previousOrder = order previousOrder = order
profiles[i] = next profiles[i] = next
ProfileManager.updateProfile(next) updated.add(next)
} }
first.userOrder = previousOrder first.userOrder = previousOrder
profiles[to] = first profiles[to] = first
ProfileManager.updateProfile(first) updated.add(first)
notifyItemMoved(from, to) notifyItemMoved(from, to)
} }
fun commitMove() {
updated.forEach { ProfileManager.updateProfile(it) }
updated.clear()
}
fun remove(pos: Int) { fun remove(pos: Int) {
profiles.removeAt(pos) profiles.removeAt(pos)
...@@ -347,6 +352,10 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -347,6 +352,10 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
profilesAdapter.move(viewHolder.adapterPosition, target.adapterPosition) profilesAdapter.move(viewHolder.adapterPosition, target.adapterPosition)
return true return true
} }
override fun clearView(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder?) {
super.clearView(recyclerView, viewHolder)
profilesAdapter.commitMove()
}
}).attachToRecyclerView(profilesList) }).attachToRecyclerView(profilesList)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment