Xamarin android: header в recyclerview

148
11 марта 2018, 20:12
public class RecyclerViewAdapter : RecyclerView.Adapter
{
    private List<Tovar> lstData = new List<Tovar>();
    private Context ctx;
    private static int TYPE_HEADER = 0;
    private static int TYPE_ITEM = 2;
    private string Header { get; set; }
    public RecyclerViewAdapter(List<Tovar> lstData, Context ctx)
    {
        this.lstData = lstData;
        this.ctx = ctx;
    }
    public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        if (holder.GetType() == typeof(HeaderViewHolder))
        {
            HeaderViewHolder headerHolder = holder as HeaderViewHolder;
            headerHolder.headerTitle.Text = lstData[position].cat;
        }
        else if (holder.GetType() == typeof(RecyclerViewHolder))
        {
            RecyclerViewHolder viewHolder = holder as RecyclerViewHolder;
            viewHolder.tvName.Text = (lstData[position].name);
            viewHolder.tvPrice.Text = (lstData[position].price);
        }
    }
    // 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.row_discounts, 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.adapter_expandable_listview_header, parent, false);
            return new HeaderViewHolder(itemView, ctx);
        }
        else return null;
    }
    // Get Number Of Items
    public override int ItemCount
    {
        get
        {
            return lstData.Count;
        }
    }
    // Custom Override to decided whether its the header or the data
    public override int GetItemViewType(int position)
    {
        if (Header != lstData[position].cat)
        {
            Header = lstData[position].cat;
            return TYPE_HEADER;
        }
        else
        {
            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.adapter_expandable_listview_header_textview);
        //headerImageView = itemView.FindViewById<ImageView>(Resource.Id.testheaderbutton);
    }
}
// xml
class RecyclerViewHolder : RecyclerView.ViewHolder
{
    //public ImageView imageView { get; set; }
    public TextView tvName { get; set; }
    public TextView tvPrice { get; set; }
    private Context ctx;

    public RecyclerViewHolder(View itemView, Context ctx) : base(itemView)
    {
        this.ctx = ctx;
        tvName = itemView.FindViewById<TextView>(Resource.Id.tvDName);
        tvPrice = itemView.FindViewById<TextView>(Resource.Id.tvDPrice);
    }
}
public class Tovar
{
    public string cat { get; set; }
    public string name { get; set; }
    public string price { get; set; }
}

Пытаюсь вывести список с категориями, первая категория выводится, а последующие нет

READ ALSO
Группировка cs-файлов в решении

Группировка cs-файлов в решении

В решении aspnet core 2

182
C# WPF Биндинг DataGrid и struct

C# WPF Биндинг DataGrid и struct

Доброго времени сутокВозникла проблема с привязкой структуры к DataGrid, раньше это делал, но вот сейчас ничего не получается, подскажите в чем...

198
Как обратиться к label который находится на пользовательском элементе управления?

Как обратиться к label который находится на пользовательском элементе управления?

Доброго времени сутокПишу с таким вот вопросом: Создал пользовательский элемент управления и поместил на него label, далее поместил пользовательский...

180
Когда стоит передавать в сервисы бизнес-слоя текущего пользователя?

Когда стоит передавать в сервисы бизнес-слоя текущего пользователя?

У Марка Симана в его книге Dependency Injection есть пример, когда он пишет сервис слоя бизнес-логики (страница 64):

141