我的问题是我希望回收者视图对整个视图的单击做出响应,而不是对回收者视图具有的每个项目的单独单击
<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
无法处理点击。我该怎么办?
注意:我不想将两个视图都包装在一个布局中,因为那样会增加整个布局的复杂性
答案 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