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
}