回收者视图不响应点击

时间:2019-04-20 16:39:46

标签: android android-recyclerview click

我的问题是我希望回收者视图对整个视图的单击做出响应,而不是对回收者视图具有的每个项目的单独单击

   <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 :(得分: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;
    }
}

答案 1 :(得分: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