From cc317117bc65e72dd9d9aca2008dcc94e02f51df Mon Sep 17 00:00:00 2001 From: zxj <275873859@qq.com> Date: Mon, 28 Jul 2025 17:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sw/platecabinet/GlobalData.kt | 4 +- .../fragment/SettingListFragment.kt | 78 ++++-------------- .../sw/platecabinet/utils/DateTimeUtils.kt | 4 +- .../platecabinet/utils/ListArrangementUtil.kt | 81 +++++++++++++++++++ 4 files changed, 100 insertions(+), 67 deletions(-) create mode 100644 app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt diff --git a/app/src/main/java/com/sw/platecabinet/GlobalData.kt b/app/src/main/java/com/sw/platecabinet/GlobalData.kt index a21f91e..484e83f 100644 --- a/app/src/main/java/com/sw/platecabinet/GlobalData.kt +++ b/app/src/main/java/com/sw/platecabinet/GlobalData.kt @@ -15,12 +15,12 @@ object GlobalData { /** * 横排数量 */ - var arrayCross: Int = 2 + var arrayCross: Int = 5 /** * 竖排数量 */ - var arrayVertical: Int = 10 + var arrayVertical: Int = 11 /** * 排列方式 0 垂直 1 水平 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 6844b01..087eed2 100644 --- a/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt +++ b/app/src/main/java/com/sw/platecabinet/fragment/SettingListFragment.kt @@ -23,10 +23,10 @@ import com.sw.platecabinet.databinding.ItemBindViewBinding import com.sw.platecabinet.ext.formatNumber import com.sw.platecabinet.ext.maskName import com.sw.platecabinet.model.response.EquipmentUserInfo +import com.sw.platecabinet.utils.ListArrangementUtil import kotlinx.coroutines.flow.drop import kotlinx.coroutines.launch import timber.log.Timber -import kotlin.math.ceil /** * 餐盘柜绑定的用户列表界面 @@ -43,7 +43,6 @@ class SettingListFragment : * 垂直滚动的adapter */ private var itemAdapter: GenericItemAdapter? = null - private val itemsPerPage = 2 * GlobalData.arrayVertical // 每行2个,每列11个,共22个 override fun registerDataChange() { super.registerDataChange() @@ -179,63 +178,27 @@ 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) { + val itemsPerPage = 2 * GlobalData.arrayVertical // 每行2个,每列11个,共22个 if (GlobalData.arrayCross > 2) { + // 多recyclerview var pages = if (items.size > itemsPerPage) { - if (GlobalData.arrayMode == 1) { - val newItems = reorderListAutoFill(items, GlobalData.arrayCross) - newItems.chunked(itemsPerPage) - } else { + if (GlobalData.arrayMode == 0) { val pageList = items.chunked(itemsPerPage) pageList.mapIndexed { index, it -> var itemList: MutableList = it.toMutableList() if (index == pageList.size - 1) { - itemList = (itemList + List(GlobalData.arrayVertical) { + // 补全剩余item + itemList = (itemList + List(itemsPerPage - itemList.size) { EquipmentUserInfo() }) as MutableList } - convertToColumnFirst(itemList, GlobalData.arrayVertical) + ListArrangementUtil.convertToColumnFirst(itemList, GlobalData.arrayVertical) } + } else { + val newItems = + ListArrangementUtil.horizontalSortPageItem(items, GlobalData.arrayCross) + newItems.chunked(itemsPerPage) } } else { listOf( @@ -244,28 +207,15 @@ class SettingListFragment : } pageAdapter?.updatePages(pages) } else { + // 单 recyclerview var pages = items if (GlobalData.arrayMode == 0) { - pages = interleaveEquipmentUsers(pages) + pages = ListArrangementUtil.verticalSortItem(pages) } itemAdapter?.updateData(pages) } binding.mainRecyclerView.scrollToPosition(0) } - /** - * 重新排列数组 - */ - private fun convertToColumnFirst( - original: List, - cols: Int - ): List { - val rows = ceil(original.size.toDouble() / cols).toInt() - return List(original.size) { pos -> - val row = pos % rows - val col = pos / rows - val originalPos = col + row * cols - original[originalPos] - } - } + } \ No newline at end of file diff --git a/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt b/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt index 9172327..a10f64c 100644 --- a/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt +++ b/app/src/main/java/com/sw/platecabinet/utils/DateTimeUtils.kt @@ -2,6 +2,7 @@ package com.sw.inbound.utils import kotlinx.coroutines.delay import kotlinx.coroutines.flow.flow +import timber.log.Timber import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -67,7 +68,8 @@ object DateTimeUtils { val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) format.parse(timeString) } catch (e: Exception) { - e.printStackTrace() +// e.printStackTrace() + Timber.e(e.message) null } } diff --git a/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt b/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt new file mode 100644 index 0000000..19ac573 --- /dev/null +++ b/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt @@ -0,0 +1,81 @@ +package com.sw.platecabinet.utils + +import com.sw.platecabinet.model.response.EquipmentUserInfo +import timber.log.Timber +import kotlin.math.ceil + +/** + * 列表排序工具类 + */ +object ListArrangementUtil { + + /** + * page item水平排序 + */ + fun horizontalSortPageItem( + list: List, + columns: Int, + defaultValue: EquipmentUserInfo = EquipmentUserInfo() + ): List { + Timber.d("horizontalSortPageItem") + // 填充缺失的数据,确保能被 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") + } + } + } + + /** + * item 垂直排序 + */ + fun verticalSortItem(list: List): List { + Timber.d("verticalSortItem") + val users = if (list.size % 2 != 0) { + Timber.d("列表长度必须是偶数") + list + EquipmentUserInfo() + } else { + list + } + + 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() + } + + /** + * page item垂直排序 + */ + fun convertToColumnFirst( + original: List, + cols: Int + ): List { + Timber.d("convertToColumnFirst") + val rows = ceil(original.size.toDouble() / cols).toInt() + return List(original.size) { pos -> + val row = pos % rows + val col = pos / rows + val originalPos = col + row * cols + original[originalPos] + } + } +} \ No newline at end of file