Я использую эту строку, чтобы проверить количество представлений в моем приложении и получить значения, связанные с ними, в качестве ввода пользователем. Любое другое представление (нечетное) - это текстовое представление, которое используется в качестве заголовка для следующего представления. Они создаются динамически во время выполнения, и поэтому я собрал идентификаторы в 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 -: WOOT! Идентификационный номер 1 TextView - General EditText
D / BEAU -: WOOT! Идентификационный номер 2 TextView - Hello World
D / BEAU -: WOOT! Идентификационный номер 2 EditText - Hello World
Однако все остальные вещи (например, строка рейтинга) работают отлично. Итак, вопрос в том, почему EditText проходит проверку типа для текстового представления;и что я могу сделать, чтобы проверить только текстовые представления, а не текстовые представления и редактировать тексты в первом операторе if?
РЕДАКТИРОВАТЬ:
Временно, я 'удалось проверить с EditTexts при проверке для TextViews. Я сделал это так: if (mView is TextView && mView !is EditText) {}
Но так ли это, и если да, то почему я должен делать это так?