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
也不会更复杂(可以说它更清晰!)
这可能比您要求的要多,但希望它有用。如果没有别的,“每次都设置文本和可见性”的方法很好而且简洁
这是我的目标:用户点击减号按钮,金额减一,并且有一个 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
也不会更复杂(可以说它更清晰!)
这可能比您要求的要多,但希望它有用。如果没有别的,“每次都设置文本和可见性”的方法很好而且简洁