Пункт меню внутри NavigationView onClick запускается только при двойном щелчке - PullRequest
0 голосов
/ 09 июля 2019

Я создал меню для 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>
...