Kotlin Прямой доступ XML Ошибка при нажатии ImageView - PullRequest
0 голосов
/ 28 января 2020

У меня есть текущий рабочий код, который добавляет

mNavigationView = findViewById(R.id.navigation)
mDrawerLayout = findViewById(R.id.drawerLayout)

val headerview : View = mNavigationView.getHeaderView(0)

mSettingsIcon = headerview.findViewById(R.id.settingsIcon)

mSettingsIcon.setOnClickListener {
    // navigate other activity
}

Я хочу заменить его, используя прямой XML доступ, который доступен на Kotlin.

Я попробовал следующее :

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

mSettingsIcon.setOnClickListener {
    // Handle Click
}

Но я получил следующую ошибку:

java .lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.my.app/com.my. app.MainActivity}: java .lang.NullPointerException: попытка вызвать виртуальный метод 'void android .widget.ImageButton.setOnClickListener (android .view.View $ OnClickListener)' для пустой ссылки на объект (... ) Вызывается: java .lang.NullPointerException: попытка вызвать виртуальный метод 'void android .widget.ImageButton.setOnClickListener (android .view.View $ OnClickListener)' для ссылки на пустой объект

Я думаю, это потому, что параметры ImageView находятся внутри другого XML (называемого заголовком навигации), который находится на XML, например:

внутри activity_main. xml:

<com.google.android.material.navigation.NavigationView
    android:id="@+id/mNavigationTab"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/navigation_header"
    app:menu="@layout/navigation_items"/>

внутри навигационного заголовка. xml:

<ImageButton
    android:id="@+id/mSettingsIcon"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:src="@drawable/icon_settings"
    android:layout_marginTop="10sp"
    android:layout_marginStart="20sp"
    android:padding="0dp"/>
* 1 022 * Кто-нибудь знает, как я могу получить доступ, используя Kotlin прямой доступ к XML компонентам?

1 Ответ

0 голосов
/ 28 января 2020

Сначала Вы должны получить HeaderView из NavigationView, а затем использовать следующий код для достижения этой цели:

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

val headerView = mNavigationTab.getHeaderView(0)

headerView.mSettingsIcon.setOnClickListener {
    // Handle Click
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...