You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android MVP架构下如何通过条件判断修改TextView文本颜色

问题根因排查

1. 超容校验触发时机错误

你当前仅在MainActivity的onCreate生命周期中调用了一次onOverCapacity(),此时count初始值为0,自然不会触发改色。后续点击加减、重置按钮修改计数时,没有重新执行超容校验逻辑。

2. Model超容标志位不会复位

overcapacity变量一旦在count>15时被设为true,后续count减少到15及以下、或者点击重置按钮时,都没有被改回false,会导致超容状态永久留存。

3. 逻辑缺失

  • 只有超容改色逻辑,没有计数回到正常区间后的颜色复位逻辑
  • 当前changeTextColor()中硬编码了青色Color.CYAN,不符合你要改成红色的需求

修复代码

步骤1:修改Model.kt,完善标志位逻辑

class Model : Contract.Model {
    private var count = 0
    private var totalCount = 0
    private var overcapacity = false

    override fun getCount(): String = count.toString()
    override fun getFlag(): Boolean = overcapacity
    override fun getTotalCount(): String = totalCount.toString()

    override fun reset() {
        count = 0
        totalCount = 0
        overcapacity = false // 新增:重置时恢复超容标志
    }

    override fun inc() {
        count += 1
        totalCount += 1
        overcapacity = count > 15 // 简化逻辑:直接赋值即可
    }

    override fun decr() {
        count -= 1
        if(count<0){
            count = 0
        }
        overcapacity = count > 15 // 新增:减计数时同步更新超容标志
    }
}

步骤2:修改Contract.kt,新增颜色复位接口

interface Contract {
    interface View {
        fun setCount(count: String)
        fun setTotalCount(count: String)
        fun changeTextColor()
        fun resetTextColor() // 新增:恢复默认颜色方法
        fun hideButton()
        fun viewButton()
    }
    // 剩余代码保持不变
}

步骤3:修改Presenter.kt,补充校验触发时机

class Presenter (private val model: Contract.Model, private val view: Contract.View): Contract.Presenter {

    override fun onAddCountButtonPressed() {
        model.inc()
        view.setCount(model.getCount())
        view.setTotalCount(model.getTotalCount())
        onOverCapacity() // 新增:加计数后校验超容
        isZero() // 新增:同步校验减按钮显隐
    }

    override fun onMinusCountButtonPressed() {
        model.decr()
        view.setCount(model.getCount())
        onOverCapacity() // 新增:减计数后校验超容
        isZero() // 新增:同步校验减按钮显隐
    }

    override fun onResetButtonPressed() {
        model.reset()
        view.setCount(model.getCount())
        view.setTotalCount(model.getTotalCount())
        onOverCapacity() // 新增:重置后校验超容
        isZero() // 新增:同步校验减按钮显隐
    }

    override fun onOverCapacity(){
        if(model.getFlag()){
            view.changeTextColor()
        }else{
            view.resetTextColor() // 新增:未超容时恢复默认颜色
        }
    }
    // 剩余代码保持不变
}

步骤4:修改MainActivity.kt,实现颜色逻辑

class MainActivity : AppCompatActivity(), Contract.View {
    // 成员变量、onCreate等代码保持不变

    override fun changeTextColor() {
        // 把CYAN改成RED满足需求
        people_count?.setTextColor(Color.RED)
        people_count_number?.setTextColor(Color.RED)
        // 建议把!!换成安全调用?,避免空指针崩溃
    }

    // 新增:实现恢复默认颜色方法,颜色可根据你的需求修改
    override fun resetTextColor() {
        people_count?.setTextColor(Color.BLACK)
        people_count_number?.setTextColor(Color.BLACK)
    }
    // 剩余代码保持不变
}

内容的提问来源于stack exchange,提问作者Caroline Lynch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:45:06