Improve performance of reordering profiles
This commit is contained in:
@@ -223,6 +223,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
|
||||
|
||||
inner class ProfilesAdapter : RecyclerView.Adapter<ProfileViewHolder>() {
|
||||
internal val profiles = ProfileManager.getAllProfiles()?.toMutableList() ?: mutableListOf()
|
||||
private val updated = HashSet<Profile>()
|
||||
|
||||
init {
|
||||
setHasStableIds(true) // see: http://stackoverflow.com/a/32488059/2245107
|
||||
@@ -252,13 +253,17 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
|
||||
next.userOrder = previousOrder
|
||||
previousOrder = order
|
||||
profiles[i] = next
|
||||
ProfileManager.updateProfile(next)
|
||||
updated.add(next)
|
||||
}
|
||||
first.userOrder = previousOrder
|
||||
profiles[to] = first
|
||||
ProfileManager.updateProfile(first)
|
||||
updated.add(first)
|
||||
notifyItemMoved(from, to)
|
||||
}
|
||||
fun commitMove() {
|
||||
updated.forEach { ProfileManager.updateProfile(it) }
|
||||
updated.clear()
|
||||
}
|
||||
|
||||
fun remove(pos: Int) {
|
||||
profiles.removeAt(pos)
|
||||
@@ -347,6 +352,10 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
|
||||
profilesAdapter.move(viewHolder.adapterPosition, target.adapterPosition)
|
||||
return true
|
||||
}
|
||||
override fun clearView(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder?) {
|
||||
super.clearView(recyclerView, viewHolder)
|
||||
profilesAdapter.commitMove()
|
||||
}
|
||||
}).attachToRecyclerView(profilesList)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user