Как получить доступ к виду из макета, указанного в headerLayout NavigationView с помощью Kotlin в Android


Я хочу получить доступ к текстовому представлению, которое включено в headerLayout NavigationView. Можно ли получить доступ к представлению с помощью расширения Kotlin android? Я использовал этот метод, но TextView (здесь txtName) всегда равен null.

Вот мой activity_main.xml

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_splash"
    app:menu="@menu/activity_splash_drawer" />

Nav_header_splash.xml

<TextView
    android:id="@+id/txtName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/txt1"
    android:layout_below="@+id/imageView"
    android:text="@string/name"
    android:textSize="18sp"
    android:textColor="@color/white" />

В Основной Активности.kt я импортировал

import kotlinx.android.synthetic.main.nav_header_splash.*

В onCreate() класса Activity I задается текст как

txtName.text = "Sample Code"

Строить.gradle папки приложений

apply plugin: 'kotlin-android-extensions'

Строить.gradle моего проекта

 classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"

Есть ли ошибка в моем коде? Пожалуйста помочь. Я новичок в Котлине.

1 5

1 ответ:

Не import kotlinx.android.synthetic.main.nav_header_splash.* он будет доступен из самого главного файла как

Вместо import kotlinx.android.synthetic.main.nav_header_splash.view.*

И получить представление с помощью

val header = mNavigationView.getHeaderView(0)
header.txtName.text = "Sample Code"