Recycler view не отвечает на клики

1

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

   <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 не обрабатывает щелчки. Как я могу это сделать?

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

Теги:
android-recyclerview
click

2 ответа

0

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

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
    когда вызывается setOnClickListener?
  • 0
    каждый раз, когда вы нажимаете на представление, используйте myModel.setOnClickListener (новый OnClickListener ....)
Показать ещё 4 комментария
0
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;
    }
}
  • 0
    Я не думаю, что есть необходимость добавлять регистр переключателя, так как оба представления будут иметь одинаковую функцию щелчка
  • 0
    Почему? как fuction может понять, что делать, если не знает, какую точку зрения назвать
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню