Recycler view не отвечает на клики - PullRequest
2 голосов
/ 20 апреля 2019

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

   <TextView
            android:id="@+id/tv_amount_reviews"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{() -> viewModel.handleClick()}"
            android:textSize="12sp"
            android:text="Title"
            app:layout_constraintStart_toStartOf="parent" />

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_event_reviews"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_marginTop="@dimen/vertical_padding"
            android:onClick="@{() -> viewModel.handleClick()}"
            android:orientation="horizontal"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="parent" />

Я хочу, чтобы и заголовок, и представление переработчика выполняли одну и ту же функцию щелчка handleClick, когда любой из них является щелчком. Заголовок TextView работает, но RecyclerView не обрабатывает клики. Как мне это сделать?

Примечание. Я не хочу объединять оба вида в один макет, поскольку это усложнит весь макет

Ответы [ 2 ]

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

Если оба вида имеют одинаковую функцию, вы можете добавить это к вашей модели

public handleClick() {

}

Затем вы можете добавить слушателя в вашу модель, например

private OnClickListener onClickListener = null;

interface OnClickListener{
   void onClick();
}
public handleClick() {
   if(onClickListener != null) onClickListener.onClick();
}

public void setOnClickListener(OnClickListener onClickListener){
    this.onClickListener = onClickListener;
}

Если вы хотите проверить, какой вид был нажат, вам нужно изменить строку ниже, а затем добавить параметр вида в handleClick(View v)

@{() -> viewModel.handleClick()} 
to
@{(v) -> viewModel.handleClick(v)} // Don't forget to add a View argument to handleClick 
0 голосов
/ 20 апреля 2019
handleClick(View view) {
    switch(view) {
        case R.id.tv_amount_reviews:
            //handle textview click;
            break;
        case R.id.rv_event_reviews:
            //handle recycler view click;
    }
}
...