Использование NavigationView из недавно выпущенной библиотеки дизайна поддержки Android, если макет заголовка навигации включает в себя onClick (в xml), событие onClick аварийно завершает работу. OnClick может быть добавлен программно через view.onClickListener
(вместо xml), а затем щелчок работает отлично. Но по какой-либо причине всякий раз, когда используется xml onClick, возникает ошибка.NavigationView onClick from xml вызывает ошибки
Вот мой основной макет:
<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()
) работают нормально. Проблема заключается в том, когда заголовок щелкнул:
drawer_header.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'
UPDATE
NavigationView можно использовать стандартные файлы меню ресурсов , но есть аналогичная проблема, если использовать onClick из меню XML-ресурса. Согласно Menu Resource reference, атрибут переопределяет нормальные обратные вызовы. Обычно это нормально работает, но с элементами меню в 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.
UPDATE
Я проверил XML OnClick с помощью "официальной" demo project для дизайна библиотеки Android. Те же результаты: добавление onClick (в xml) в меню или заголовок NavigationView приводит к сбою приложения. Таким образом, это выглядит как ошибка с NavigationView.
ПОСТАНОВИЛИ В v23.1
Google выпустила a fix для этих XML ошибок OnClick в v23.1 Поддержка библиотеки.
Вы используете фрагменты – Elltz
Да, я использую фрагменты и просмотрщик. – hungryghost
хорошо, поэтому onclick в xml не будет работать в активности, потому что, поскольку заголовок выглядит в классе фрагментов, имеет ли смысл сэр? – Elltz