ViewHolder
基于此布局而膨胀:
将监听器添加到整个ViewHolder
,或者精确地添加到itemView
:
userSettingHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
但只有imageView
的第一项可以激活监听器。为什么不是整个项目,而不是最后两个'sub' - recycleview
?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="66dp">
<ImageView
android:id="@+id/icon"
android:layout_width="66dp"
android:layout_height="66dp"
android:padding="0dp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rw1"
android:layout_marginStart="66dp"
android:layout_marginTop="0dp"
android:layout_marginBottom="33dp"
android:layout_height="33dp"
android:layout_width="match_parent"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rw2"
android:layout_marginStart="66dp"
android:layout_marginTop="33dp"
android:layout_marginBottom="0dp"
android:layout_height="33dp"
android:layout_width="match_parent"/>
</RelativeLayout>
答案 0 :(得分:0)
当您点击 ImageView 时,触摸会传递给 itemView 的父级。但是当您点击 RecyclerView 时消耗触摸。
我建议您将此属性添加到xml
中的 RecyclerViewandroid:clickable="false"
如果这不起作用,那么你必须继承 RecyclerView 并覆盖onInterceptTouchEvent
方法。
public class ScrollThroughRecyclerView extends RecyclerView {
public ScrollThroughRecyclerView(Context context) {
super(context);
}
public ScrollThroughRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollThroughRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
}
然后在你的xml而不是
<android.support.v7.widget.RecyclerView
使用<your.file.path.ScrollThroughRecyclerView
但这两种解决方案都会使 RecyclerView 无法点击,而且不可滚动。