Как не использовать findViewById? - PullRequest
0 голосов
/ 08 сентября 2018

Обычно мы не используем findViewById (R.id.listView) в kotlin, потому что студия Android делает это для нас автоматически (нам не нужно искать представление). Но этот пример показывает, что мы нуждаемся в нем (в этой строке кода):

val listView = findViewById<ListView>(R.id.listView) as ListView.

Почему мы используем эту строку в этом примере? Как его не использовать?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Если вы используете findViewById от Kotlin, вам никогда не понадобится приведение (от API уровня 26 и выше).Вы должны использовать его одним из следующих двух способов:

val myTV1 = findViewById<TextView>(R.id.myTextView)
val myTV2: TextView = findViewById(R.id.myTextView)

И затем вы можете получить доступ к его свойствам через следующие переменные:

myTV1.text = "testing"

Это совершенно правильный способ получения ссылок и просмотра.используя их в Kotlin как есть.


Однако, если у вас также включены Расширения Kotlin Android , включенные в проект (по строке apply plugin: 'kotlin-android-extensions' на уровне вашего модуля build.gradleфайл), вы также можете ссылаться на свои Представления по их идентификаторам через синтетические свойства, которые он предоставляет, просто убедитесь, что вы правильно импортировали, например:

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        myTextView.text = "testing"
    }

}

Обратите внимание, что Kotlin Android Extensions совершенно необязателен дляиспользуйте, и если вы используете его, findViewById, конечно, все еще доступен, если по какой-либо причине вы хотите смешать два метода.

0 голосов
/ 08 сентября 2018

В общем, когда вам нужен вид из файла макета, вы можете импортировать следующее:

kotlinx.android.synthetic.main.<layout filename>.<id of view>

Если вам нужны все виды из файла макета, вы можете использовать:

kotlinx.android.synthetic.main.<layout filename>.*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...