xamarin学习笔记A06(安卓RecycleView点击事件)

(每次学习一点xamarin就做个学习笔记视频来加深记忆巩固知识)
如有不正确的地方,请帮我指正。

实现RecyclerView中Item的基本点击事件
这里写图片描述

准备工作
从Nuget下载安装
Xamarin.Android.Support.v7.AppCompat
Xamarin.Android.Support.v7.RecyclerView

第一种实现点击事件的方式
主要用到RecyclerView.Adapter类,首先自定义MsgAdapter类继承自这个类,在每个Item视图创建的时候(OnCreateViewHolder)给其设置点击事件,Item视图有两个设置点击事件监听器的方法,一个是普通点击SetOnClickListener(),一个是长按点击SetOnLongClickListener,贴上部分代码:

public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
View msgItemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.MsgItem, parent, false);
            MsgViewHolder holder = new MsgViewHolder(msgItemView);
            msgItemView.SetOnClickListener(this);
            msgItemView.SetOnLongClickListener(this);
            return holder;
        }

接着MsgAdapter实现接口OnClickListener的方法OnClick,实现接口IOnLongClickListener的方法OnLongClick把事件传递到外部(本例子外部即MainActivity)调用。
贴上部分代码:
自定义一个接口

public interface IRecyclerViewItemClickListener //自定义的RecyclerView的Item的点击接口
    {
        void OnItemClick(View itemView, int position); //普通Click点击

        void OnItemLongClick(View itemView, MsgAdapter.MsgViewHolder msgViewHolder);//长按Click点击
}

自定义的MsgAdapter类的代码

public class MsgAdapter : RecyclerView.Adapter, IOnClickListener, IOnLongClickListener
    {
        private IRecyclerViewItemClickListener m_IRecyclerViewItemClickListener;

        public void SetIRecyclerViewClickListener(IRecyclerViewItemClickListener listener)
        {
            m_IRecyclerViewItemClickListener = listener;
        }

        public void OnClick(View v) //普通点击
        {
            int position = m_RecyclerView.GetLayoutManager().GetPosition(v);
            if (m_IRecyclerViewItemClickListener != null)
                m_IRecyclerViewItemClickListener.OnItemClick(v, position);
        }

        public bool OnLongClick(View v) //长按点击
        {
            MsgAdapter.MsgViewHolder holder = m_RecyclerView.GetChildViewHolder(v) as MsgAdapter.MsgViewHolder;
            if (m_IRecyclerViewItemClickListener != null)
                m_IRecyclerViewItemClickListener.OnItemLongClick(v, holder);
            return true;
        }
    }

第二种实现点击事件的方式(推荐)
主要用到RecyclerView.SimpleOnItemTouchListener和GestureDetector.SimpleOnGestureListener这两个类,使用RecyclerView.AddOnItemTouchListener(…)来添加点击事件

贴上部分代码

    // 手势监听器类
    public class MsgSimpleOnGestureListener : GestureDetector.SimpleOnGestureListener
    {
        private RecyclerView m_RecyclerView;
        private IRecyclerViewItemClickListener m_IRecyclerViewClickListerner;
        public MsgSimpleOnGestureListener(RecyclerView rv, IRecyclerViewItemClickListener listener)
        {
            m_RecyclerView = rv;
            m_IRecyclerViewClickListerner = listener;
        }
        public override bool OnSingleTapUp(MotionEvent e)//单击事件
        {
            View child = m_RecyclerView.FindChildViewUnder(e.GetX(), e.GetY());
            if (child != null)
            {
                RecyclerView.ViewHolder vh = m_RecyclerView.GetChildViewHolder(child);
                int position = vh.LayoutPosition;
                if (m_IRecyclerViewClickListerner != null)
                {
                    m_IRecyclerViewClickListerner.OnItemClick(child, position);
                }
            }
            return true;
        }

        public override void OnLongPress(MotionEvent e)//长按事件
        {
            View child = m_RecyclerView.FindChildViewUnder(e.GetX(), e.GetY());
            if (child != null)
            {
                MsgAdapter.MsgViewHolder vh = m_RecyclerView.GetChildViewHolder(child) as MsgAdapter.MsgViewHolder;

                if (m_IRecyclerViewClickListerner != null)
                {
                    m_IRecyclerViewClickListerner.OnItemLongClick(child, vh);
                }
            }
        }
}
// Item的触摸监听器类
    public class MsgSimpleOnItemTouchListener : RecyclerView.SimpleOnItemTouchListener
    {

        private RecyclerView m_RecyclerView;
        private GestureDetectorCompat m_GestureDetector;

        public MsgSimpleOnItemTouchListener(RecyclerView rv, MsgSimpleOnGestureListener simpleOnGestureListener)
        {
            m_RecyclerView = rv;
            m_GestureDetector = new GestureDetectorCompat(rv.Context, simpleOnGestureListener);
        }

        public override bool OnInterceptTouchEvent(RecyclerView rv, MotionEvent e)
        {
            if (m_GestureDetector.OnTouchEvent(e))
                return true;
            else
                return false;
        }

        public override void OnTouchEvent(RecyclerView rv, MotionEvent e)
        {

        }
    }

RecyclerView列表中的Item视图的添加,删除,移动操作
对RecyclerView列表中的Item视图的添加,删除,移动操作分别是用到RecyclerView.Adapter里的三个方法:
NotifyItemInserted(int position)
NotifyItemRemoved(int position)
NotifyItemMoved(int fromPosition, int toPosition)

完整代码和视频在我上传的CSDN资源中http://download.csdn.net/download/junshangshui/9873240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值