Я создал меню для NavigationView
, добавив ListView
внутри моего NavigationView
.Затем я сделал кастом ArrayAdapter
, куда добавляется каждый пункт меню.К каждому пункту меню прикреплен собственный макет XML.Корень этого макета используется функцией запуска onClickListener
, переданной классу элементов меню в качестве параметра.
Все работает отлично, но когда я нажимаю на элемент, эта функция не будет запускаться, только при двойном щелчке.Почему происходит такое поведение?
Код: Это класс для элемента меню (этот класс расширяется несколькими элементами) Не у каждого элемента меню есть событие щелчка (например, заголовки разделов)
abstract class DrawerItem(var itemName: String, var imgResID: Int, var onClick: (() -> Unit)? = null)
Вот как onClick
вызывается внутри getView
функции для некоторых пунктов меню:
val root: LinearLayout = view.findViewById(R.id.root)
root.setOnClickListener {
menuItem.onClick?.invoke()
}
XML-макет для NavigationView:
<com.google.android.material.navigation.NavigationView
android:id="@+id/drawer_menu"
android:layout_gravity="left"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@color/white">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/navigation_header_container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
<ListView
android:id="@+id/lst_menu_items"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</com.google.android.material.navigation.NavigationView>
Макет одного типа элемента меню:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/root"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@drawable/navig_menu_selector"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:duplicateParentState="true"
android:clickable="false"
android:padding="@dimen/padding_medium">
<ImageView
android:id="@+id/navig_ico"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"/>
<TextView
android:id="@+id/navig_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingStart="@dimen/padding_medium"
style="@style/navig_item_text"/>
</LinearLayout>
<include layout="@layout/custom_separator"/>
</LinearLayout>