kotlin - 我的 if 语句和运算符有问题

kotlin - Problem with my if statement and operator

这是我的目标:用户点击减号按钮,金额减一,并且有一个 if 语句不允许金额低于 0。

这是我的代码:

   var number = 0
        view.text_amount.visibility = View.GONE

        view.plus_btn.setOnClickListener {

            if (number == 5) {
                Toast.makeText(
                    requireContext(),
                    "Limit in order",
                    Toast.LENGTH_SHORT
                ).show()
            } else {
                view.text_amount.visibility = View.VISIBLE
                number++
                view.text_amount.text = number.toString()
            }
        }
        view.minus_btn.setOnClickListener {
            if (number <= 0) {
                view.text_amount.visibility = View.GONE
            } else {
                number--
                view.text_amount.text = number.toString()

            }

        }

代码有问题:我不希望金额在达到 0 后可见。 amount等于0时不可见体验更好

我认为它有一个简单的解决方案,但我看不到。 你有什么想法吗?

只有当 text_amount 包含的值大于 0 时才减小它的值,然后再次检查它的值,如果它是 0 则隐藏它:

view.minus_btn.setOnClickListener {
    if (number > 0) {
        number--
        view.text_amount.text = number.toString()      
        if (number == 0) view.text_amount.visibility = View.GONE
    }
}

您的代码运行良好!如果你想让它更简单,你可以将一些重复的逻辑浓缩成一个处理这些情况的函数:

fun adjustValue(amount: Int) {
    val adjusted = number + amount
    if (adjusted > 5) // show Toast
    number = adjusted.coerceIn(0, 5)
    view.text_amount.text = number.toString()
    view.text_amount.visibility = if (number == 0) View.GONE else View.VISIBLE
}

view.minus_btn.setOnClickListener { adjustValue(-1) }
view.plus_btn.setOnClickListener { adjustValue(1) }

基本上,您的想法是计算出新值(我使用的是临时变量,因此我们永远不会将 number 设置为无效值)并显示您需要的任何警告。然后 coerceIn 行确保我们将其锁定在允许值的有效范围内。

您可以进行 if/else 检查并仅在新值有效时才设置新值,但有时只设置内容然后担心边缘情况会更简单、更短,所以这只是一个示例那个!

对于 TextView 位也是如此 - 只需设置它的值,然后设置是否显示它会更容易。您可以使用 if/else 分支来查看值并决定是否设置文本......但是为什么要让您的生活变得艰难?我们知道该值在 0 到 5 的有效范围内,如果它是 0,我们可以隐藏它,否则显示它...简单!


您可以让函数采用 Boolean,例如 plus: Boolean,然后转到 val adjusted = number + if (plus) 1 else -1,但将其设为 Int 意味着您可以轻松添加 + 10 个按钮或其他任何东西,无需添加更多代码或任何更多验证逻辑,并且传入 -1 而不是 false 也不会更复杂(可以说它更清晰!)

这可能比您要求的要多,但希望它有用。如果没有别的,“每次都设置文本和可见性”的方法很好而且简洁