diff --git a/app/src/main/java/com/sw/platecabinet/GlobalData.kt b/app/src/main/java/com/sw/platecabinet/GlobalData.kt index 1937575..a21f91e 100644 --- a/app/src/main/java/com/sw/platecabinet/GlobalData.kt +++ b/app/src/main/java/com/sw/platecabinet/GlobalData.kt @@ -15,7 +15,7 @@ object GlobalData { /** * 横排数量 */ - var arrayCross: Int = 3 + var arrayCross: Int = 2 /** * 竖排数量 diff --git a/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt b/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt index 2b48501..6844b01 100644 --- a/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt +++ b/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt @@ -108,7 +108,7 @@ class SettingListFragment : item: EquipmentUserInfo, position: Int ) { - if (item.equipmentBoxCode?.isEmpty() == true) { + if (item.isPlaceholder() == true) { this.llRoot.isVisible = false return } @@ -179,29 +179,76 @@ class SettingListFragment : } } + fun reorderListAutoFill( + list: List, + columns: Int, + defaultValue: EquipmentUserInfo = EquipmentUserInfo() + ): List { + // 填充缺失的数据,确保能被 columns 整除 + val filledList = if (list.size % columns != 0) { + list + List(columns - (list.size % columns)) { defaultValue } + } else { + list + } + + val chunks = filledList.chunked(columns) + return (0 until columns) + .windowed(2, 2, partialWindows = true) + .flatMap { group -> + when (group.size) { + 2 -> chunks.flatMap { listOf(it[group[0]], it[group[1]]) } + 1 -> chunks.flatMap { + listOf( + it[group[0]], + EquipmentUserInfo(equipmentBoxCode = null) + ) + }.dropLast(1) + + else -> error("Unexpected group size") + } + } + } + + fun interleaveEquipmentUsers(users: List): List { + require(users.size % 2 == 0) { "列表长度必须是偶数" } + + val half = users.size / 2 + val firstHalf = users.take(half) + val secondHalf = users.drop(half) + + return firstHalf.zip(secondHalf) { a, b -> listOf(a, b) }.flatten() + } + fun updateAdapter(items: List) { if (GlobalData.arrayCross > 2) { var pages = if (items.size > itemsPerPage) { - val pageList = items.chunked(itemsPerPage) - pageList.mapIndexed { index, it -> - var itemList: MutableList = it.toMutableList() - if (index == pageList.size - 1) { - itemList = (itemList + List(GlobalData.arrayVertical) { - EquipmentUserInfo() - }) as MutableList + if (GlobalData.arrayMode == 1) { + val newItems = reorderListAutoFill(items, GlobalData.arrayCross) + newItems.chunked(itemsPerPage) + } else { + val pageList = items.chunked(itemsPerPage) + pageList.mapIndexed { index, it -> + var itemList: MutableList = it.toMutableList() + if (index == pageList.size - 1) { + itemList = (itemList + List(GlobalData.arrayVertical) { + EquipmentUserInfo() + }) as MutableList + } + convertToColumnFirst(itemList, GlobalData.arrayVertical) } - convertToColumnFirst(itemList, GlobalData.arrayVertical) } } else { listOf( - // 根据条件判断是否需要重新排列 items -// convertToColumnFirst(items, GlobalData.arrayVertical) ) } pageAdapter?.updatePages(pages) } else { - itemAdapter?.updateData(items) + var pages = items + if (GlobalData.arrayMode == 0) { + pages = interleaveEquipmentUsers(pages) + } + itemAdapter?.updateData(pages) } binding.mainRecyclerView.scrollToPosition(0) } diff --git a/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt b/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt index 71257a5..5325c50 100644 --- a/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt +++ b/app/src/main/java/com/sw/platecabinet/model/response/EquipmentUserInfo.kt @@ -73,4 +73,8 @@ data class EquipmentUserInfo( fun isOtherEquipment(): Boolean { return GlobalData.globalEquipmentCode != equipmentCode } + + fun isPlaceholder(): Boolean { + return equipmentBoxCode == null || equipmentBoxCode == "" + } } \ No newline at end of file