
我开始在Android中使用RecyclerVIEw.在我为我的适配器实现触摸侦听器之前,工作正常.
从这个主题:
https://stackoverflow.com/a/26826692/2923403
我可以正确实现childvIEw的监听器.但是,我想实现OnItemClick和OnItemLongClick,然后出现问题.他们总是同时被解雇. OnItemClick首先和OnItemLongClick稍后,这使我的函数无用.
这是我的自定义监听器的代码(基于上面的代码,感谢Fouad):
public class RecyclerItemClickListener implements RecyclerVIEw.OnItemtouchListener {private OnItemClickListener mListener;public static interface OnItemClickListener { public boolean onItemClick(VIEw vIEw, int position); public voID onItemLongClick(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 childVIEw = recyclerVIEw.findChildVIEwUnder(e.getX(), e.getY()); if (childVIEw != null && mListener != null) { mListener.onItemLongClick(childVIEw, recyclerVIEw.getChildposition(childVIEw)); } } });}@OverrIDepublic 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.getChildposition(childVIEw)); return true; } return false;}@OverrIDepublic voID ontouchEvent(RecyclerVIEw vIEw, MotionEvent motionEvent) {}并为实施:
mRecyclerVIEw.addOnItemtouchListener(new RecyclerItemClickListener(getActivity(), mRecyclerVIEw, new RecyclerItemClickListener.OnItemClickListener() {@OverrIDe public boolean onItemClick(VIEw vIEw, int position) {//This is fired 1st} @OverrIDe public voID onItemLongClick(VIEw vIEw, int position) {//This comes later}));你有什么解决方案吗?
解决方法:
您可以在自定义适配器实现中添加侦听器.它将是这样的:
public class RecyclerVIEwAdapter extends RecyclerVIEw.Adapter<RecyclerVIEwAdapter.VIEwHolder> { public interface OnItemClickListener { public voID onItemClicked(int position); } public interface OnItemLongClickListener { public boolean onItemLongClicked(int position); } private Fragment mFragment; public static class VIEwHolder extends RecyclerVIEw.VIEwHolder { public VIEw v; public VIEwHolder(VIEw v) { super(v); this.v = v; } } public RecyclerVIEwAdapter(Fragment fragment) { mFragment = fragment; } @OverrIDe public voID onBindVIEwHolder(VIEwHolder holder, final int position) { holder.v.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { mFragment.onItemClicked(position); } }); holder.v.setonLongClickListener(new VIEw.OnLongClickListener() { @OverrIDe public boolean onLongClick(VIEw v) { mFragment.onItemLongClicked(position); return true; } }); } . . .}注意开头的接口定义.这样,您就可以将onClick和onLongClick事件传递给您的片段进行处理.你知道,非常方便
总结以上是内存溢出为你收集整理的android – OnLongItemClick在RecyclerView中全部内容,希望文章能够帮你解决android – OnLongItemClick在RecyclerView中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)