Как отличить событие клика самого рециркулятора от его владельцев - PullRequest
0 голосов
/ 23 апреля 2019

В настоящее время у меня есть вид рециркулятора с шириной соответствия родителей и разметкой сетки внутри раздела. Поэтому я установил прослушиватель кликов для родительского макета и для элемента списка, который при нажатии вызывал бы различную реакцию. Проблема в том, что список не всегда полный, и когда он не полный, я не могу щелкнуть пустое пространство в представлении переработчика, поскольку оно было заблокировано представлением переработчика.

Я попытался установить прослушиватель щелчка на само представление рециркулятора, но безуспешно. Я также не могу изменить параметры макета, чтобы они стали содержимым переноса, потому что он должен совпадать с родительским, чтобы он был размещен с сеткой.

На самом деле у меня есть грязное решение для этого, на getItemCount я жестко закодировал счетчик, чтобы быть максимальным размером столбца сетки, и создал пустой тип держателя вида макета. В onBindViewholder я могу проверить, если текущая позиция столбца больше, чем реальный размер списка, я просто выкладываю тот пустой видовой макет, который я могу установить для прослушивателя click. Я просто думаю, может быть, есть более чистое решение для этого.

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Поскольку RecyclerView расширяет Scroll-layout, он отменяет настройки щелчков внешнего слоя.

Я бы сказал, используйте ограничение ограничений, а затем под обзором переработчика добавьте пустое относительное расположение, охватывающее вашу группу, которая может иметь этот прослушиватель щелчков;

 <android.support.v7.widget.CardView
    android:id="@+id/card_view_outer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/global_dimen_16_dp"
    android:layout_marginLeft="@dimen/global_dimen_16_dp"
    android:layout_marginTop="@dimen/global_dimen_24_dp"
    android:layout_marginRight="@dimen/global_dimen_16_dp"
    app:cardBackgroundColor="@color/black12"
    app:cardCornerRadius="@dimen/global_dimen_4_dp"
    app:cardElevation="3dp">

    <android.support.v7.widget.CardView
        android:id="@+id/card_view_inner"
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:layout_gravity="center"
        android:layout_margin="1dp"
        android:gravity="center"
        app:cardBackgroundColor="@color/white100"
        app:cardCornerRadius="@dimen/global_dimen_4_dp"
        app:cardElevation="0dp">

       <android.support.constraint.ConstraintLayout
            android:id="@+id/relativeLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
         <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="parent"/>
            <RelativeLayout
                android:id="@+id/layover"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="@id/recyclerView" />
          </android.support.v7.widget.CardView>
</android.support.v7.widget.CardView>
0 голосов
/ 23 апреля 2019

Установите onClickListener внутри Layout, а не в самом RecyclerView.

Добавьте макет в свой файл ресурсов пользовательского макета, присвойте ему идентификатор и установите onClickListener в классе адаптера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...