如何制作自定义可扩展列表视图?

时间:2019-03-29 06:09:05

标签: c# xamarin.android

这是一个短信应用,我想为其创建一个可扩展的列表视图  我已发送的邮件或已发送的短信,我想将食谱编号作为  我的展开式列表视图的标题。

mycustomadapter ..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Java.Lang;
using MhylesApp.ViewHolder;

namespace MhylesApp.CustomAdapter
{
    public class ExistingCustExpandableAdapter : BaseExpandableListAdapter
    {
        private Context context;
        private List<string> _listGroup;
        private Dictionary<string, List<string>> _lastChild;

        public ExistingCustExpandableAdapter(Context context, List<string> _listGroup, Dictionary<string, List<string>> _lastChild)
        {
            this.context = context;
            this._listGroup = _listGroup;
            this._lastChild = _lastChild;
        }
        public override int GroupCount
        {
            get
            {
                return _listGroup.Count;
            }
        }
        public override bool HasStableIds
        {
            get
            {
                return false;
            }
        }

        public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
        {
            var result = new List<string>();
            _lastChild.TryGetValue(_listGroup[groupPosition], out result);
            return result[childPosition];
        }

        public override long GetChildId(int groupPosition, int childPosition)
        {
            return childPosition;
        }

        public override int GetChildrenCount(int groupPosition)
        {
            var result = new List<string>();
            _lastChild.TryGetValue(_listGroup[groupPosition], out result);
            return result.Count;
        }

        public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
        {
            if(convertView == null)
            {
                LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
                convertView = inflater.Inflate(Resource.Layout.ExistingSentItems, null);
                TextView phoneNum = convertView.FindViewById<TextView>(Resource.Id.phoneNum);
                TextView agentName = convertView.FindViewById<TextView>(Resource.Id.agentName);
                TextView custName = convertView.FindViewById<TextView>(Resource.Id.custName);
                TextView products = convertView.FindViewById<TextView>(Resource.Id.products);
                TextView sendDate = convertView.FindViewById<TextView>(Resource.Id.sendDate);
                TextView myResult = convertView.FindViewById<TextView>(Resource.Id.myReslt);

                convertView.Tag = new ExistingCustSentOrderViewHolder()
                {
                    phoneNum = phoneNum,
                    agentName = agentName,
                    custName = custName,
                    products = products,
                    sendDate = sendDate,
                    sentResult = myResult,
                };
            }
            var holder = (ExistingCustSentOrderViewHolder)convertView.Tag;
            //TextView phoneNum = convertView.FindViewById<TextView>(Resource.Id.phoneNum);
            //TextView agentName = convertView.FindViewById<TextView>(Resource.Id.agentName);
            //TextView custName = convertView.FindViewById<TextView>(Resource.Id.custName);
            //TextView products = convertView.FindViewById<TextView>(Resource.Id.products);
            //TextView sendDate = convertView.FindViewById<TextView>(Resource.Id.sendDate);
            //TextView myResult = convertView.FindViewById<TextView>(Resource.Id.myReslt);
            string content = (string)GetChild(groupPosition, childPosition);
            holder.phoneNum.Text = content;
            holder.agentName.Text = content;
            holder.custName.Text = content;
            holder.products.Text = content;
            holder.sendDate.Text = content;
            holder.sentResult.Text = content;
            return convertView;

        }

        public override Java.Lang.Object GetGroup(int groupPosition)
        {
            return _listGroup[groupPosition];
        }

        public override long GetGroupId(int groupPosition)
        {
            return groupPosition;
        }

        public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
        {
            if(convertView == null)
            {
                LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
                convertView = inflater.Inflate(Resource.Layout.ExistingCustSentItemGroup, null);
                TextView SentItemGroup = convertView.FindViewById<TextView>(Resource.Id.SentItemGroup);

                convertView.Tag = new ExistingCustSentOrderViewHolder()
                {
                    phoneNum = SentItemGroup
                };
            }
            string sentItemGroup = (string)GetGroup(groupPosition);
            var holder = (ExistingCustSentOrderViewHolder)convertView.Tag;
            holder.phoneNum.Text = sentItemGroup;
            return convertView;
        }

        public override bool IsChildSelectable(int groupPosition, int childPosition)
        {
            return true;
        }
    }
}

请点击此链接查看我的完整代码。

https://forums.xamarin.com/discussion/152806/how-to-make-a-custom-expandable-list-view/p1?new=1

0 个答案:

没有答案