Android,XAMARIN:将一个LinearLayout标题添加到RecyclerView';s顶部(可点击)

Android,XAMARIN:将一个LinearLayout标题添加到RecyclerView';s顶部(可点击),android,xamarin,android-linearlayout,android-recyclerview,Android,Xamarin,Android Linearlayout,Android Recyclerview,我到处找,什么也找不到。 我设法把我的回收视图放得恰到好处,唯一缺少的是一个标题。在我以前的listview中,我只是将第一个元素设计为我的标题。这是一个线性布局,里面有一些文本视图和一些图像作为可点击按钮。至于RecyclerView,我还没能做到。这里有人能帮我吗 以下是我的“回收者”视图中的3个(工作)类: class RecyclerViewAdapter : RecyclerView.Adapter { private List<DataForProfile> ls

我到处找,什么也找不到。 我设法把我的回收视图放得恰到好处,唯一缺少的是一个标题。在我以前的listview中,我只是将第一个元素设计为我的标题。这是一个线性布局,里面有一些文本视图和一些图像作为可点击按钮。至于RecyclerView,我还没能做到。这里有人能帮我吗

以下是我的“回收者”视图中的3个(工作)类:

class RecyclerViewAdapter : RecyclerView.Adapter
{
    private List<DataForProfile> lstData = new List<DataForProfile>();
    private Context ctx;

    public RecyclerViewAdapter(List<DataForProfile> lstData, Context ctx)
    {
        this.lstData = lstData;
        this.ctx = ctx;
    } 


    public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {

        RecyclerViewHolder viewHolder = holder as RecyclerViewHolder;

        viewHolder.txtTitle.Text = (lstData[position].description);
        viewHolder.imageView.SetImageBitmap((lstData[position].img));


    }

    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        LayoutInflater inflater = LayoutInflater.From(parent.Context);
        View itemView = inflater.Inflate(Resource.Layout.RecView_Profile, parent, false);
        return new RecyclerViewHolder(itemView, ctx);
    }

    //Get Number Of Items
    public override int ItemCount
    {
        get
        {
            return lstData.Count;
        }
    }

}




public class DataForProfile
{
    public int imageId { get; set; }
    public Bitmap img { get; set; }
    public string description { get; set; }

}

class RecyclerViewHolder : RecyclerView.ViewHolder
{
    public ImageView imageView { get; set; }
    public TextView txtTitle { get; set; }
    public TextView txtDescription { get; set; }
    public TextView txtDate { get; set; }
    public TextView txtLikeCountBlue { get; set; }
    public TextView txtLikeCountGreen { get; set; }
    public TextView txtComments { get; set; }
    private Typeface font;
    private Context ctx;


    public RecyclerViewHolder(View itemView, Context ctx) : base(itemView)
    {
        this.ctx = ctx;
        txtTitle = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_TaskName);
        imageView = itemView.FindViewById<ImageView>(Resource.Id.imageView1);
        txtDescription = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Description);
        txtDate = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Date);
        txtLikeCountBlue = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_blue);
        txtLikeCountGreen = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_green);
        txtComments = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_comments);

        font = Typeface.CreateFromAsset(ctx.Assets, "CourierNew.ttf");

        txtTitle.SetTypeface(font, TypefaceStyle.Bold);
        txtDescription.SetTypeface(font, TypefaceStyle.Normal);
        txtDate.SetTypeface(font, TypefaceStyle.Normal);
        txtLikeCountBlue.SetTypeface(font, TypefaceStyle.Normal);
        txtLikeCountGreen.SetTypeface(font, TypefaceStyle.Normal);
        txtComments.SetTypeface(font, TypefaceStyle.Normal);

    }
}
类RecyclerViewAdapter:RecyclerView.Adapter
{
私有列表lstData=新列表();
私有上下文ctx;
公共RecycleServiceAdapter(列表lstData,上下文ctx)
{
this.lstData=lstData;
this.ctx=ctx;
} 
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
RecyclerViewHolder=作为RecyclerViewHolder的持有人;
viewHolder.txtTitle.Text=(lstData[position].description);
viewHolder.imageView.SetImageBitmap((lstData[position].img));
}
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
LayoutInflater充气器=LayoutInflater.From(父上下文);
View itemView=充气机.充气(Resource.Layout.RecView\u配置文件,父项,false);
返回新的RecycleServiceWholder(itemView,ctx);
}
//获取项目数
公共覆盖int ItemCount
{
收到
{
返回lstData.Count;
}
}
}
公共类DataForProfile
{
公共int-imageId{get;set;}
公共位图img{get;set;}
公共字符串说明{get;set;}
}
类RecyclerView.ViewHolder:RecyclerView.ViewHolder
{
公共图像视图图像视图{get;set;}
公共文本视图txtTitle{get;set;}
公共文本视图txtDescription{get;set;}
公共文本视图txtDate{get;set;}
公共文本视图txtLikeCountBlue{get;set;}
公共文本视图txtLikeCountGreen{get;set;}
公共文本视图txtComments{get;set;}
专用字体;
私有上下文ctx;
公共RecycleServiceWholder(查看项目视图,上下文ctx):基本(项目视图)
{
this.ctx=ctx;
txtTitle=itemView.findviewbyd(Resource.Id.RecView\u Profile\u TaskName);
imageView=itemView.FindViewById(Resource.Id.imageView1);
txtDescription=itemView.findviewbyd(Resource.Id.RecView\u Profile\u Description);
txtDate=itemView.findviewbyd(Resource.Id.RecView\u Profile\u Date);
txtlikecocountblue=itemView.findviewbyd(Resource.Id.txt\u recview\u profile\u blue);
txtlikecocountgreen=itemView.findviewbyd(Resource.Id.txt\u recview\u profile\u green);
txtComments=itemView.FindViewById(Resource.Id.txt\u recview\u profile\u comments);
font=Typeface.CreateFromAsset(ctx.Assets,“CourierNew.ttf”);
设置字体(字体、字体样式、粗体);
txtDescription.SetTypeface(字体、字体样式.普通);
SetTypeface(字体、字体样式、普通);
SetTypeface(字体、字体样式、普通);
SetTypeface(字体、字体样式、普通);
SetTypeface(字体,Typeface.Normal);
}
}

任何帮助都会很棒

好的,在做了一些重写之后-下面是实现这一点的工作代码:

class RecyclerViewAdapter : RecyclerView.Adapter
{
    private List<DataForProfile> lstData = new List<DataForProfile>();
    private Context ctx;
    private static int TYPE_HEADER = 0;
    private static int TYPE_ITEM = 2;

    public RecyclerViewAdapter(List<DataForProfile> lstData, Context ctx)
    {
        this.lstData = lstData;
        this.ctx = ctx;
    } 

    public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {

        //Check oif Header orData
        if (holder.GetType() == typeof(HeaderViewHolder)) 
        {
            HeaderViewHolder headerHolder = holder as HeaderViewHolder;
            headerHolder.headerTitle.Text = "hall0";

            headerHolder.headerTitle.Click += delegate
            {
                Toast.MakeText(ctx, "Header!", ToastLength.Long).Show();
            };

            headerHolder.headerImageView.Click += delegate
            {
                Toast.MakeText(ctx, "image!", ToastLength.Long).Show();
            };
        }             
        else if (holder.GetType() == typeof(RecyclerViewHolder)) 
        {
             RecyclerViewHolder viewHolder = holder as RecyclerViewHolder;
             viewHolder.txtTitle.Text = (lstData[position-1].description); // - 1 because of the header
             viewHolder.imageView.SetImageBitmap((lstData[position-1].img));

        }

    }

    // What layout to be inflated?
    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {

        if (viewType == TYPE_ITEM)
        {
            // Data
             LayoutInflater inflater = LayoutInflater.From(parent.Context);
             View itemView = inflater.Inflate(Resource.Layout.RecView_Profile, parent, false);
             return new RecyclerViewHolder(itemView, ctx);
        }
        else if (viewType == TYPE_HEADER)
        {
            //Inflating header view
            LayoutInflater inflater = LayoutInflater.From(parent.Context);
            View itemView = inflater.Inflate(Resource.Layout.testheader, parent, false);
            return new HeaderViewHolder(itemView, ctx);
        }
        else return null;
    }

    // Get Number Of Items
    public override int ItemCount
    {
        get
        {
            return lstData.Count + 1; // +1 due to the header
        }
    }

    // Custom Override to decided whether its the header or the data
    public override int GetItemViewType(int position)
    {
        if (position == 0)
        {
            return TYPE_HEADER;
        }
        else if (position == lstData.Count() + 1) //+1 wegen des Headers
        {
            return TYPE_ITEM;;
        }
        return TYPE_ITEM;
    }

}

// class for header
public class HeaderViewHolder : RecyclerView.ViewHolder
{
    public TextView headerTitle;
    public ImageView headerImageView;

    public HeaderViewHolder(View itemView, Context ctx) : base(itemView)
    {
        headerTitle = itemView.FindViewById<TextView>(Resource.Id.testheadertitle);
        headerImageView = itemView.FindViewById<ImageView>(Resource.Id.testheaderbutton);
    }
}

// xml
class RecyclerViewHolder : RecyclerView.ViewHolder
{
    public ImageView imageView { get; set; }
    public TextView txtTitle { get; set; }
    public TextView txtDescription { get; set; }
    public TextView txtDate { get; set; }
    public TextView txtLikeCountBlue { get; set; }
    public TextView txtLikeCountGreen { get; set; }
    public TextView txtComments { get; set; }
    private Typeface font;
    private Context ctx;


    public RecyclerViewHolder(View itemView, Context ctx) : base(itemView)
    {
        this.ctx = ctx;
        txtTitle = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_TaskName);
        imageView = itemView.FindViewById<ImageView>(Resource.Id.imageView1);
        txtDescription = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Description);
        txtDate = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Date);
        txtLikeCountBlue = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_blue);
        txtLikeCountGreen = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_green);
        txtComments = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_comments);

        font = Typeface.CreateFromAsset(ctx.Assets, "CourierNew.ttf");

        txtTitle.SetTypeface(font, TypefaceStyle.Bold);
        txtDescription.SetTypeface(font, TypefaceStyle.Normal);
        txtDate.SetTypeface(font, TypefaceStyle.Normal);
        txtLikeCountBlue.SetTypeface(font, TypefaceStyle.Normal);
        txtLikeCountGreen.SetTypeface(font, TypefaceStyle.Normal);
        txtComments.SetTypeface(font, TypefaceStyle.Normal);

    }
}


public class DataForProfile
{
    public int imageId { get; set; }
    public Bitmap img { get; set; }
    public string description { get; set; }

}
类RecyclerViewAdapter:RecyclerView.Adapter
{
私有列表lstData=新列表();
私有上下文ctx;
私有静态int TYPE_头=0;
私有静态int TYPE_ITEM=2;
公共RecycleServiceAdapter(列表lstData,上下文ctx)
{
this.lstData=lstData;
this.ctx=ctx;
} 
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
//检查oif标题或数据
if(holder.GetType()==typeof(HeaderViewHolder))
{
HeaderWilder headerHolder=作为HeaderWilder的支架;
headerHolder.headerTitle.Text=“hall0”;
headerHolder.headerTitle.Click+=代理
{
Toast.MakeText(ctx,“Header!”,ToastLength.Long.Show();
};
headerHolder.headerImageView.Click+=代理
{
Toast.MakeText(ctx,“image!”,ToastLength.Long.Show();
};
}             
else if(holder.GetType()==typeof(RecycleServiceWholder))
{
RecyclerViewHolder=作为RecyclerViewHolder的持有人;
viewHolder.txtTitle.Text=(lstData[position-1].description);/-1,因为标题的原因
viewHolder.imageView.SetImageBitmap((lstData[position-1].img));
}
}
//什么布局需要充气?
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
if(viewType==类型\项)
{
//资料
LayoutInflater充气器=LayoutInflater.From(父上下文);
View itemView=充气机.充气(Resource.Layout.RecView\u配置文件,父项,false);
返回新的RecycleServiceWholder(itemView,ctx);
}
else if(viewType==类型\标题)
{
//膨胀头视图
LayoutInflater充气器=LayoutInflater.From(父上下文);
View itemView=inflater.Inflate(Resource.Layout.testheader,父项,false);
返回新的HeadServiceWholder(itemView,ctx);
}
否则返回null;
}
//获取项目数
公共覆盖int ItemCount
{
收到
{
返回lstData.Count+1;//+1(由于标头)
}
}
//自定义覆盖,以决定其是标题还是数据
公共覆盖int GetItemViewType(int位置)
{
如果(位置==0)
{
返回类型_头;
}
如果(位置==lstData.Count()+1)/+1 weg