需求:使用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即可
长处:更新履行时间短,效率高
缺点:查询时需求做处理,效率低

待续

如果有更好的办法欢迎你来共享。