【问题标题】:Chip setoncheckedchangelistener String comparison return false芯片 setoncheckedchangelistener 字符串比较返回 false
【发布时间】:2019-10-29 04:16:59
【问题描述】:

一些背景:我正在根据他们的日期过滤旅行,这些旅行在火力基地上,我有一个方法(getTripState)将当前日期与旅行日期,并根据情况返回“即将到来”或“旧旅行”。芯片起到开关按钮的作用,启用单选。我根据芯片文本过滤tripArray 是否等于行程中的日期。即使String完全一样,比较也会返回false。

chipGroup.setOnCheckedChangeListener { chipGroup, i ->
        val chip: Chip = chipGroup.findViewById(i)

        rvHome.adapter = TripHistoryAdaptor(context, tripsArray.filter {
            Toast.makeText(context, (it.date.getTripState() == chip.text).toString(), Toast.LENGTH_SHORT).show()
            Toast.makeText(context, "${it.date.getTripState()} == ${chip.text} ", Toast.LENGTH_SHORT).show()

            it.startAt.getTripState() === chip.text

        } as ArrayList<Trip>)

        (rvHome.adapter as TripHistoryAdaptor).notifyDataSetChanged()
    }

【问题讨论】:

  • 尝试调试并检查it.date.getTripState()和chip.text的值
  • 我做到了,它们是一样的。

标签: android kotlin android-chips


【解决方案1】:

可能是因为case-sensitive comparison。看我下面的例子

val first = "kotlin"
val second = "kotlin"
val firstCapitalized = "KOTLIN"

println(first == second) // output: True
print(first == firstCapitalized) // output: False [becuase uppercase and lowercase]

因此,您可以通过将字符串转换为lowercase 来比较字符串,如下所示。

val first = "kotlin"
val second = "kotlin"
val firstCapitalized = "KOTLIN"

println(first == second) // output: True
print(first.toLowerCase() == firstCapitalized.toLowerCase()) // output: True

另一种方式,您可以将equals methodpass true 用于second optional parameter ignoreCase:

val first = "kotlin"
val second = "kotlin"
val firstCapitalized = "KOTLIN"

println(first.equals(second)) // output: True
print(first.equals(firstCapitalized, true)) // output: True

【讨论】:

  • 字符串完全一样。但还是失败了。谢谢
猜你喜欢
  • 2019-10-06
  • 2016-12-18
  • 1970-01-01
  • 2013-12-06
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
相关资源
最近更新 更多