我有的recyclerView包含一些文本视图和2个图像视图.
当用户点击每个图像视图时,我想在用户点击每一行和另一个任务时执行任务..但我只能同时处理其中一个.
现在如果我设置recylerview.addOnItemTouchListener我无法处理图像视图onclicks clicklistener并在适配器中设置为on ,因为当用户点击图像视图时,行的点击监听器将触发.
下面的代码是我的处理回收站视图项目的类
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
public void onLongItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && mListener != null) {
mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
}
}
});
}
@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 true;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
@Override
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
Run Code Online (Sandbox Code Playgroud)
这是我在适配器内的持有人
public MyViewHolder(View view) {
super(view);
tv_word = (TextView) view.findViewById(R.id.tv_word_show);
tv_english = (TextView) view.findViewById(R.id.tv_english_show);
tv_translation = (TextView) view.findViewById(R.id.tv_tranlation_show);
tv_numbershow = (TextView) view.findViewById(R.id.tv_numershow);
fav = (ImageView) view.findViewById(R.id.iv_fav);
more = (ImageView) view.findViewById(R.id.iv_more);
fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"show some text for test",Toast.LENGTH_LONG).show();
}
});
Run Code Online (Sandbox Code Playgroud)
我感谢任何帮助我的问题
在适配器类中创建接口.
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
public interface ClickListener {
void ItemClicked(View v, int position);
}
Run Code Online (Sandbox Code Playgroud)
像这样在顶部声明对象:
ClickListener clickListener;
holder.view.setOnclickListener(new OnclickListener(
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.ItemClicked(v, getAdapterPosition());
}
}
);
Run Code Online (Sandbox Code Playgroud)
在类中实现此接口并初始化clicklistener,您将适配器设置为recyclerview.
adapter.setClickListener(this);
Run Code Online (Sandbox Code Playgroud)
当你在课堂上实现这个时,你会得到以下方法:
@Override
public void ItemClicked(View v, int position) {
}
Run Code Online (Sandbox Code Playgroud)
应用switch case v.getId()可以处理需要实现的单击侦听器.
| 归档时间: |
|
| 查看次数: |
6193 次 |
| 最近记录: |