Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击项目时的RecyclerView.ViewHolder_C#_Xamarin - Fatal编程技术网

C# 单击项目时的RecyclerView.ViewHolder

C# 单击项目时的RecyclerView.ViewHolder,c#,xamarin,C#,Xamarin,我正在Visual Studio 2017上与RecyclerView(Xamarin.Android)合作,这是我的第一个Xamarin项目,因为我是本地Android开发人员,对于在Recycler视图上实现项目点击事件,我有点困惑。我刚刚使用IDE提供的默认模板(RecyclerAdapter类)创建了RecyclerView.Adapter,它看起来很像本机实现: 这是我的代码: using System; using Android.Views; using Android.Widge

我正在Visual Studio 2017上与RecyclerView(Xamarin.Android)合作,这是我的第一个Xamarin项目,因为我是本地Android开发人员,对于在Recycler视图上实现项目点击事件,我有点困惑。我刚刚使用IDE提供的默认模板(RecyclerAdapter类)创建了RecyclerView.Adapter,它看起来很像本机实现:

这是我的代码:

using System;
using Android.Views;
using Android.Widget;
using Android.Support.V7.Widget;

namespace Airlink
{
    class PdfAdapter : RecyclerView.Adapter
    {
        public event EventHandler<PdfAdapterClickEventArgs> ItemClick;
        public event EventHandler<PdfAdapterClickEventArgs> ItemLongClick;
        Pdf[] items;

        public PdfAdapter(Pdf[] data)
        {
            items = data;
        }

        // Create new views (invoked by the layout manager)            
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup   
        parent, int viewType)
        {

            //Setup your layout here
            View itemView = null;
            //var id = Resource.Layout.__YOUR_ITEM_HERE;   
            itemView=LayoutInflater.From(parent.Context).
            Inflate(Resource.Layout.pdf_item, parent, false);  


            var vh = new PdfAdapterViewHolder(itemView, OnClick, 
            OnLongClick);
            return vh;
        }

        // Replace the contents of a view (invoked by the layout manager)
        public override void OnBindViewHolder(RecyclerView.ViewHolder 
        viewHolder, int position)
        {
            var item = items[position];

            // Replace the contents of the view with that element
            PdfAdapterViewHolder holder = viewHolder as 
            PdfAdapterViewHolder;
            holder.pdf_name.Text = items[position].Name;
        }

        public override int ItemCount => items.Length;

        void OnClick(PdfAdapterClickEventArgs args) => 
        ItemClick?.Invoke(this, args);
        void OnLongClick(PdfAdapterClickEventArgs args) => 
        ItemLongClick?.Invoke(this, args);

    }

    public class PdfAdapterViewHolder : RecyclerView.ViewHolder
    {
        public TextView pdf_name { get; set; }


        public PdfAdapterViewHolder(View itemView, 
            Action<PdfAdapterClickEventArgs> clickListener,
            Action<PdfAdapterClickEventArgs> longClickListener) : 
        base(itemView)
        {
            pdf_name = itemView.FindViewById<TextView>
            (Resource.Id.pdf_name);
            itemView.Click += (sender, e) => clickListener(new 
            PdfAdapterClickEventArgs { View = itemView, Position = 
            AdapterPosition });
            itemView.LongClick += (sender, e) => longClickListener(new 
            PdfAdapterClickEventArgs { View = itemView, Position = 
            AdapterPosition });
        }
    }

    public class PdfAdapterClickEventArgs : EventArgs
    {
        public View View { get; set; }
        public int Position { get; set; }


    }
}
在ViewHolder构造函数方法内部


我的意思是,我可以更改默认的C#实现,以获得类似于上面代码段的内容,但我希望保留原始的C#代码

您将在创建适配器实例的活动/片段中实现OnClick事件处理程序

这一行表示您正在适配器类中公开
项click
事件

public event EventHandler<PdfAdapterClickEventArgs> ItemClick;
您将有一个方法:

public void OnItemClick(object sender, PdfAdapterClickEventArgs e)
{
   var view = args.View; //this is your view
   Toast.MakeText(this, $"Item Position: {args?.Position}", ToastLength.Short).Show();
}

希望这有帮助。

您将在创建适配器实例的活动/片段中实现OnClick事件处理程序

这一行表示您正在适配器类中公开
项click
事件

public event EventHandler<PdfAdapterClickEventArgs> ItemClick;
您将有一个方法:

public void OnItemClick(object sender, PdfAdapterClickEventArgs e)
{
   var view = args.View; //this is your view
   Toast.MakeText(this, $"Item Position: {args?.Position}", ToastLength.Short).Show();
}
希望这有帮助