优化排序号相同导致的排序问题

This commit is contained in:
kunfei
2023-03-12 23:45:00 +08:00
parent 868aa71caa
commit fe152079ce
5 changed files with 24 additions and 35 deletions

View File

@@ -321,7 +321,7 @@ abstract class RecyclerAdapter<ITEM, VB : ViewBinding>(protected val context: Co
fun getItemByLayoutPosition(position: Int) = items.getOrNull(getActualPosition(position))
fun getItems(): List<ITEM> = items
fun getItems(): List<ITEM> = items.toList()
protected open fun getItemViewType(item: ITEM, position: Int) = 0

View File

@@ -158,9 +158,6 @@ interface BookSourceDao {
@get:Query("select max(customOrder) from book_sources")
val maxOrder: Int
@Query("select count(*) from (select customOrder, count(customOrder) from book_sources group by customOrder having count(customOrder) > 1)")
fun sameSortNumberSize(): Int
private fun dealGroups(list: List<String>): List<String> {
val groups = linkedSetOf<String>()
list.forEach {

View File

@@ -596,8 +596,8 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
}
}
override fun upOrder() {
viewModel.upOrder()
override fun upOrder(items: List<BookSource>) {
viewModel.upOrder(items)
}
override fun toTop(bookSource: BookSource) {

View File

@@ -263,15 +263,11 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
val srcItem = getItem(srcPosition)
val targetItem = getItem(targetPosition)
if (srcItem != null && targetItem != null) {
if (srcItem.customOrder == targetItem.customOrder) {
callBack.upOrder()
} else {
val srcOrder = srcItem.customOrder
srcItem.customOrder = targetItem.customOrder
targetItem.customOrder = srcOrder
movedItems.add(srcItem)
movedItems.add(targetItem)
}
val srcOrder = srcItem.customOrder
srcItem.customOrder = targetItem.customOrder
targetItem.customOrder = srcOrder
movedItems.add(srcItem)
movedItems.add(targetItem)
}
swapItem(srcPosition, targetPosition)
return true
@@ -281,7 +277,15 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
override fun onClearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
if (movedItems.isNotEmpty()) {
callBack.update(*movedItems.toTypedArray())
val sortNumberSet = hashSetOf<Int>()
movedItems.forEach {
sortNumberSet.add(it.customOrder)
}
if (movedItems.size > sortNumberSet.size) {
callBack.upOrder(getItems())
} else {
callBack.update(*movedItems.toTypedArray())
}
movedItems.clear()
}
}
@@ -319,7 +323,7 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
fun toBottom(bookSource: BookSource)
fun searchBook(bookSource: BookSource)
fun debug(bookSource: BookSource)
fun upOrder()
fun upOrder(items: List<BookSource>)
fun upCountView()
}
}

View File

@@ -16,19 +16,6 @@ import java.io.FileOutputStream
*/
class BookSourceViewModel(application: Application) : BaseViewModel(application) {
init {
execute {
val sameSortNumberSize = appDb.bookSourceDao.sameSortNumberSize()
if (sameSortNumberSize > 0) {
val sources = appDb.bookSourceDao.all
sources.forEachIndexed { index, bookSource ->
bookSource.customOrder = index
appDb.bookSourceDao.update(bookSource)
}
}
}
}
fun topSource(vararg sources: BookSource) {
execute {
sources.sortBy { it.customOrder }
@@ -64,13 +51,14 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
execute { appDb.bookSourceDao.update(*bookSource) }
}
fun upOrder() {
fun upOrder(items: List<BookSource>) {
if (items.isEmpty()) return
execute {
val sources = appDb.bookSourceDao.all
for ((index: Int, source: BookSource) in sources.withIndex()) {
source.customOrder = index + 1
val firstSortNumber = items[0].customOrder
items.forEachIndexed { index, bookSource ->
bookSource.customOrder = firstSortNumber + index
appDb.bookSourceDao.update(bookSource)
}
appDb.bookSourceDao.update(*sources.toTypedArray())
}
}