Android 单击ImageView时出现Kotlin直接访问XML错误

Android 单击ImageView时出现Kotlin直接访问XML错误,android,kotlin,Android,Kotlin,我有当前的工作代码,它添加了 mNavigationView = findViewById(R.id.navigation) mDrawerLayout = findViewById(R.id.drawerLayout) val headerview : View = mNavigationView.getHeaderView(0) mSettingsIcon = headerview.findViewById(R.id.settingsIcon) mSettingsIcon.setOnC

我有当前的工作代码,它添加了

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
}
我想用Kotlin上提供的直接XML访问来替换它

我尝试了以下方法:

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"/>

内部导航_header.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"/>


有人知道如何使用Kotlin直接访问XML组件吗?

首先,您必须从
NavigationView
获取
HeaderView
,然后使用以下代码实现此目的:

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
}