我正在使用此行来检查我的应用程序中的许多视图,并获取与它们相关联的值,作为用户的输入。每隔一个视图(奇数)是一个文本视图,用作以下视图的标题。这些是在运行时动态创建的,因此我将ID收集到arrayList中,以在以下循环中使用:
for(id in data.orEmpty()) {
val mView = findViewById<View>(id)
if (mView is TextView) {
Log.d("BEAU - ", "WOOT! ID number $id TextView - ${mView.text}")
}
if (mView is EditText) {
Log.d("BEAU - ", "WOOT! ID number $id EditText - ${mView.text}")
}
if (mView is RatingBar) {
Log.d("BEAU - ", "WOOT! ID number $id RatingBar - ${mView.numStars}")
}
}
我遇到的问题是,每个EditText都被同时视为TextView和EditText;所以我会有这样的东西:
D / BEAU-:哇! ID号1 TextView-常规EditText
D / BEAU-:哇! ID号2 TextView-Hello World
D / BEAU-:哇! ID号2 EditText-Hello World
但是,其他所有内容(例如评分栏)都可以正常工作。因此,问题是,为什么EditText通过文本视图的类型检查?是否可以执行某些操作以仅检查文本视图而不检查文本视图,并在第一个if语句中编辑文本?
编辑:
暂时,我已经能够在检查TextView时对照EditText进行检查。我这样做是这样的:if (mView is TextView && mView !is EditText) {}
但是,这样做有权利吗?如果是这样,为什么我必须这样做呢?
EditText is TextView
在EditText
类中,您可以看到-
class EditText extends TextView { ... }
when (view.javaClass) {
TextView::class.java, AppCompatTextView::class.java -> {}
EditText::class.java, AppCompatEditText::class.java -> {}
RatingBar::class.java, AppCompatRatingBar::class.java -> {}
}