【问题标题】:kotlin: check if item is textboxkotlin:检查项目是否为文本框
【发布时间】:2020-07-22 19:57:14
【问题描述】:

我正在尝试检查元素是否是 kotlin 中的文本框。我有一个包含以下 4 项的列表:

0 = {AppCompatTextView@9533} "androidx.appcompat.widget.AppCompatTextView{4df7f9e V.ED..... ........ 0,0-47,111 #7f07007f app:id/roller1}"
1 = {AppCompatTextView@9554} "androidx.appcompat.widget.AppCompatTextView{e3faa7f V.ED..... ........ 0,111-47,222 #7f070080 app:id/roller2}"
2 = {AppCompatTextView@9555} "androidx.appcompat.widget.AppCompatTextView{4487a4c V.ED..... ........ 0,222-47,333 #7f070081 app:id/roller3}"
3 = {AppCompatButton@9531} "androidx.appcompat.widget.AppCompatButton{193bc20 VFED..C.. ...P.... 406,333-673,465 #7f07007e app:id/roll_button}"

现在我正在尝试使用以下表达式检查每个项目是否是 TextView: if (item is TextView){ rollRoller(item) }。但由于某种原因,所有项目的条件都为真。谁能解释一下为什么?谢谢!

【问题讨论】:

标签: android kotlin button textview


【解决方案1】:

正如IR42 所说——按钮扩展了TextView。

AppCompatButton 超类的层次结构:

您可以使用或is AppCompatTextView,而不是检查is TextView。但是这种更改将要求您在您检查其视图的布局中使用AppCompatTextView

AppCompatTextView 有一个已知的子类 - EmojiAppCompatTextView。因此,它对您来说会更安全。

【讨论】:

  • 非常感谢!但是你们怎么看像if (item !is Button)这样的另一种表达方式?
  • 你可以获得很多非文本视图的结果。这实际上取决于您要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多