У меня есть текущий рабочий код, который добавляет
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 компонентам?