是否可以使RecyclerView
无法点击?我想这样做是因为我的RecyclerView
只是在可点击 CardView
中显示了一些小图标。因此,如果有人点击图标,则只需点击(并动画)父CardView
。
我尝试了以下内容:
recyclerView.setClickable(false);
recyclerView.setFocusable(false);
RecyclerView
并让onTouchEvent(MotionEvent)
返回false
。itemView.setClickable(false);
适配器中使用RecyclerView
。这样做,点击发送给父母。但是,现在RecyclerView
不再可滚动了。clickable="false"
,focusable="false"
,focusableInTouchMode="false"
。 (见评论 @Ibrahim )recyclerView#setLayoutFrozen(true)
和itemView.setClickable(false);
。这有效,但与#4有相同的问题。有关如何禁用RecyclerView
的点击事件并将其传递到父视图的任何想法?请注意,RecyclerView
仍然需要可滚动(水平)。
修改
用户@c.dunlap建议将OnClick侦听器设置为图标,并将点击“重定向”到父级的单击操作。这可以工作,但父视图上不会有点击动画。如果有人在itemView外部点击 - 但仍在RecyclerView
内(例如ItemDecoration填充) - 则未检测到点击。所以不幸的是,这不是一个解决方案。
答案 0 :(得分:5)
您应该扩展父视图并拦截点击,以便recyclelerview不会收到它。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
致记:Solution
答案 1 :(得分:3)
我处理此类事情的首选方法是从适配器附加一个侦听器,当您单击Recycler视图中的每个图标时,该侦听器将被调用。然后您的活动可以以适当的方式响应。例如:
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private MyAdapterListener mListener;
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.iconClicked();
}
});
}
public void setListener(MyAdapterListener listener) {
mListener = listener;
}
public interface MyAdapterListener {
void iconClicked();
}
}
然后在您的活动中,您只需创建一个MyAdapterListener实例,并将其设置为Recycler View适配器的侦听器。然后,当触发iconClicked()
函数时,执行将在父单击时执行的代码。
答案 2 :(得分:-1)
我有同样的问题,在我尝试了更多的东西后,我在recyclerview上再使用了一个布局。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layoutwidth="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
之后你可以看到并消除了“LinearLayout”。 这100%工作。