需求:使用Room对保存的数据进行排序
完成思路1:也是最简单想到的,移动方针item到指定方位,从指定方位到方位改变了的item的Position悉数+1或-1
长处:简单完成
缺点:履行时间长
完成思路2:参考网上找到的办法,为item的Position设置初始值65536(不要太小),然后顺次增加一倍,然后依据Position大小排序。拖拽时依据方位对position进行修改,有以下三种状况:
override fun onDrag(
source: BindingAdapter.BindingViewHolder,
target: BindingAdapter.BindingViewHolder
) {
val sourcePosition = source.absoluteAdapterPosition//进行拖拽item的新方位
val sourceModel = mMemoList[sourcePosition]
val targetPosition =
target.absoluteAdapterPosition//targetPosition 是target的移动方向的方位
val targetModel = mMemoList[targetPosition]
when (sourcePosition) {
0 -> {
sourceModel.position = targetModel.position / 2
}
modelCount - 1 -> {
sourceModel.position = targetModel.position + INCREMENT
}
else -> {
val position =
if (sourcePosition + 1 != targetPosition) sourcePosition + 1
else sourcePosition - 1
val model = mMemoList[position]
sourceModel.position =
(model.position + targetModel.position) / 2
}
}
val switchMemo = UrlMemoEvent.SwitchMemo()
switchMemo.sourceModel = sourceModel
mViewModel.input(switchMemo)
}
长处:履行时间短,效率高
缺点:当前后两个元素的数值,不满足整数时,需求更新一切元素的排序Position。
完成思路3:用双向链表完成,为表增加前后id两个字段,当移动时改变前后id即可
长处:更新履行时间短,效率高
缺点:查询时需求做处理,效率低
待续
如果有更好的办法欢迎你来共享。