我的问题是,我想要一个回收站视图来响应整个视图的点击,而不是单独点击回收站视图的每个项目
<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
不处理点击。我怎么能做到这一点?
注意:我不想在一个布局中包装两个视图,因为这会增加整个布局的复杂性
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;
}
}
如果两个视图具有相同的功能,则可以将其添加到模型中
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