android–OnLongItemClick在RecyclerView中

android–OnLongItemClick在RecyclerView中,第1张

概述我开始在Android中使用RecyclerView.在我为我的适配器实现触摸侦听器之前,工作正常.从这个主题:https://stackoverflow.com/a/26826692/2923403我可以正确实现childview的监听器.但是,我想实现OnItemClick和OnItemLongClick,然后出现问题.他们总是同时被解雇.OnItemClick首先和O

我开始在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中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102910.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存