管灌系统巡查员智能手机App
expand_button/src/main/java/com/example/expand_button/ExpandButton.kt
@@ -499,49 +499,20 @@
    fun setButtonId(id: String) {
        this.buttonId = id
        // 加载保存的状态
        loadStates()
    }
    /**
     * 保存所有图例项的状态
     */
    private fun saveStates() {
        val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
        val states = legendItems.map { it.isSelected }
        prefs.edit().putString("${KEY_LEGEND_STATES}_$buttonId", states.joinToString(",")).apply()
    }
    /**
     * 加载保存的状态
     */
    private fun loadStates() {
        val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
        val savedStates = prefs.getString("${KEY_LEGEND_STATES}_$buttonId", null)
        if (savedStates != null && legendItems.isNotEmpty()) {
            val states = savedStates.split(",").map { it.toBoolean() }
            states.forEachIndexed { index, state ->
                if (index < legendItems.size) {
                    legendItems[index].isSelected = state
                }
            }
            invalidate()
        }
    }
    /**
     * 设置图例内容
     */
    @JvmName("setLegendsList")
    fun setLegends(items: List<Triple<Drawable, Drawable, String>>) {
        legendItems = items.map { (selectedIcon, unselectedIcon, description) ->
    fun setLegends(items: List<Quadruple<Drawable, Drawable, String, Boolean>>) {
        legendItems = items.map { (selectedIcon, unselectedIcon, description, isSelected) ->
            selectedIcon.setBounds(0, 0, iconSize, iconSize)
            unselectedIcon.setBounds(0, 0, iconSize, iconSize)
            LegendItem(selectedIcon, unselectedIcon, description)
            LegendItem(selectedIcon, unselectedIcon, description, isSelected)
        }
        // 加载保存的状态
        loadStates()
        
        if (!isExpanded) {
            text = collapsedText
@@ -553,8 +524,21 @@
    // 添加一个 Java 友好的方法
    @JvmName("setLegendsArray")
    fun setLegends(vararg items: Triple<Drawable, Drawable, String>) {
    fun setLegends(vararg items: Quadruple<Drawable, Drawable, String, Boolean>) {
        setLegends(items.toList())
    }
    // 添加一个数据类来表示四元组
    data class Quadruple<A, B, C, D>(
        val first: A,
        val second: B,
        val third: C,
        val fourth: D
    )
    // 添加一个便捷的扩展函数来创建 Quadruple
    fun <A, B, C, D> quadrupleOf(first: A, second: B, third: C, fourth: D): Quadruple<A, B, C, D> {
        return Quadruple(first, second, third, fourth)
    }
    /**
@@ -635,10 +619,7 @@
            index, 
            legendItems[index].isSelected
        )
        // 保存状态
        saveStates()
        invalidate()
    }