Menggunakan NavigationView dari pustaka desain dukungan Android yang baru dirilis, jika tata letak header navigasi menyertakan onClick (dalam xml), peristiwa onClick membuat aplikasi mogok. OnClick dapat ditambahkan secara terprogram melalui view.onClickListener
(bukan xml), dan kemudian mengklik berfungsi dengan baik. Namun karena alasan tertentu, setiap kali xml onClick digunakan, selalu terjadi kesalahan.
Inilah tata letak utama saya:
<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>
Dalam aktivitas saya, klik item menu saya (ditambahkan dengan navView.setNavigationItemSelectedListener()
) berfungsi dengan baik. Masalahnya adalah ketika header diklik:
laci_header.xml:
...
<View
android:id="@+id/testButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:onClick="testButtonClick"/>
...
Menghasilkan kesalahan berikut:
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'
PEMBARUAN
NavigationView dapat menggunakan file sumber daya Menu standar, namun ada masalah serupa jika menggunakan onClick dari sumber daya menu XML. Menurut referensi Sumber Daya Menu, atribut android:onClick
menggantikan atribut normal panggilan balik. Ini biasanya berfungsi dengan baik, tetapi dengan item menu di NavigationView, tidak. Sebaliknya, ia crash dengan kesalahan ini:
java.lang.RuntimeException: Unable to start activity ComponentInfo{...}:
android.view.InflateException: Binary XML file line #34:
Error inflating class android.support.design.widget.NavigationView
Kesalahan hilang ketika saya menghapus XML onClick.
PEMBARUAN
Saya menguji xml onClick menggunakan proyek demo "resmi" untuk Perpustakaan Desain Android. Hasil yang sama: menambahkan onClick (dalam xml) ke menu atau header NavigationView menyebabkan aplikasi mogok. Jadi sepertinya ini adalah bug pada NavigationView.
DISELESAIKAN DI v23.1
Google merilis perbaikan untuk error XML onClick ini di Support Library v23 .1.