Используя NavigationView из недавно выпущенной библиотеки дизайна поддержки Android, если макет заголовка навигации включает onClick (в xml), событие onClick приводит к сбою приложения. OnClick можно добавить программно через view.onClickListener
(вместо xml), и тогда щелчок работает нормально. Но по какой-то причине всякий раз, когда используется xml onClick, возникает ошибка.
Вот мой основной макет:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainActivityLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<RelativeLayout
android:id="@+id/mainContentFrame"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</RelativeLayout>
<android.support.design.widget.NavigationView
android:id="@+id/drawerNavView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/drawer_menu">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
В моей деятельности щелчки моего пункта меню (добавленные с помощью navView.setNavigationItemSelectedListener()
) работают нормально. Проблема заключается в том, что при нажатии на заголовок:
ящик_заголовок.xml:
...
<View
android:id="@+id/testButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:onClick="testButtonClick"/>
...
Выдает следующую ошибку:
java.lang.IllegalStateException: Could not find a method testButtonClick(View)
in the activity class android.view.ContextThemeWrapper for onClick handler
on view class android.view.View with id 'testButton'
ОБНОВЛЕНИЕ
NavigationView может использовать стандартные файлы ресурсов меню, но возникает аналогичная проблема при использовании onClick из XML-ресурса меню. Согласно справке по ресурсам меню, атрибут android:onClick
переопределяет обычный обратные вызовы. Обычно это работает нормально, но с элементами меню в NavigationView это не так. Вместо этого он вылетает с этой ошибкой:
java.lang.RuntimeException: Unable to start activity ComponentInfo{...}:
android.view.InflateException: Binary XML file line #34:
Error inflating class android.support.design.widget.NavigationView
Ошибка исчезает, когда я удаляю XML onClick.
ОБНОВЛЕНИЕ
Я протестировал xml onClick, используя «официальный» демонстрационный проект для Android Design Library. Те же результаты: добавление onClick (в xml) в меню или заголовок NavigationView приводит к сбою приложения. Так что это похоже на ошибку с NavigationView.
РЕШЕНО В версии 23.1
Компания Google выпустила исправление для этих ошибок XML onClick в Support Library v23. .1.