[EditText是检查类型时的TextView

问题描述 投票:1回答:2

我正在使用此行来检查我的应用程序中的许多视图,并获取与它们相关联的值,作为用户的输入。每隔一个视图(奇数)是一个文本视图,用作以下视图的标题。这些是在运行时动态创建的,因此我将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) {}但是,这样做有权利吗?如果是这样,为什么我必须这样做呢?

kotlin casting android-edittext
2个回答
0
投票
EditText is TextView

EditText类中,您可以看到-

class EditText extends TextView { ... }

0
投票
when (view.javaClass) { TextView::class.java, AppCompatTextView::class.java -> {} EditText::class.java, AppCompatEditText::class.java -> {} RatingBar::class.java, AppCompatRatingBar::class.java -> {} }
© www.soinside.com 2019 - 2024. All rights reserved.