[英]Click listener working for recycler view but for other views
我有一个回收站视图,列表中有一个列表,视图单元格上有一个进度条。 当我单击其他视图时,发生单击事件。 但是当按回收商视图项目时,什么也没有发生。 请告诉我原因。 我粘贴下面的oncreateview持有人的代码。
class MockSeriesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView examMeta;
RecyclerView subjectBubbles;
BubbleAdapter adapter;
NumberProgressBar numberProgressBar;
public MockSeriesViewHolder(final View itemView) {
super(itemView);
examMeta = (TextView) itemView.findViewById(R.id.tv_exam_meta);
numberProgressBar = (NumberProgressBar) itemView.findViewById(R.id.pb_exam_progress);
subjectBubbles = (RecyclerView) itemView.findViewById(R.id.rv_subject_bubbles);
subjectBubbles.setHasFixedSize(true);
subjectBubbles.setLayoutManager(new LinearLayoutManager(itemView.getContext(), LinearLayoutManager.VERTICAL, false));
adapter = new BubbleAdapter(itemView.getContext());
subjectBubbles.setAdapter(adapter);
itemView.setOnClickListener(this);
}
public void renderMockTestSeries(TestSeriesTest test) {
adapter.setItems(test.getSubjects());
examMeta.setText(test.getNoOfQuestions() + " QUESTIONS " + (test.getTimeLimitInSeconds() / 60) + " MINUTES");
numberProgressBar.setProgress(test.getPercentageOfCompletion());
}
@Override
public void onClick(View view) {
TestSeriesTest series = getItem(getLayoutPosition());
mListener.onTestSeriesTestClicked(series);
}
}
然后单击列表器类是
public interface TestSeriesTestClickListener {
public void onTestSeriesTestClicked(TestSeriesTest mockTest);}
创建一个名为RecyclerItemClickListener的类:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
}
然后将以下代码添加到您的活动中:
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
// TODO Handle item click
}
})
);
仅此而已。 您可以在OnItemClick中输入代码,并在其中获得项目位置
RecyclerItemClickListener
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
}
ClickListener
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
// TODO Handle item click
}
})
);
我的性格是您的subjectBubbles
必须包含可点击的项目,以防止click事件传播到父视图。
检查您的BubbleAdapter
,查看其中是否有任何点击事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.