public override View GetView(int position, View convertView, ViewGroup parent)
        {
            int sectionnum = 0;

            foreach (var section in sections.Keys)
            {
                var adapter = sections [section];
                int size    = adapter.Count + 1;

                // check if position inside this section
                if (position == 0)
                {
                    return(headers.GetView(sectionnum, convertView, parent));
                }
                if (position < size)
                {
                    return(adapter.GetView(position - 1, convertView, parent));
                }

                // otherwise jump into next section
                position -= size;
                sectionnum++;
            }
            return(null);
        }
示例#2
0
        public void setListViewHeightBasedOnChildren(ListView listView)
        {
            try
            {
                ArrayAdapter listAdapter = (ArrayAdapter)listView.Adapter;
                if (listAdapter == null)
                {
                    // pre-condition
                    return;
                }

                int totalHeight = 0;
                for (int i = 0; i < listAdapter.Count; i++)
                {
                    View listItem = listAdapter.GetView(i, null, listView);
                    listItem.Measure(0, 0);
                    totalHeight += listItem.MeasuredHeight;
                }

                ViewGroup.LayoutParams _params = listView.LayoutParameters;

                _params.Height = totalHeight + (listView.DividerHeight * (listAdapter.Count - 1));
                if (_params.Height < 250) //to have min height
                {
                    _params.Height = 250; //to have min height
                }
                listView.LayoutParameters = _params;
                listView.RequestLayout();
            }
            catch (Exception ex)
            {
            }
        }
示例#3
0
        /// <summary>
        /// Grouped list: view could be a 'section heading' or a 'data row'
        /// </summary>
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            // Get our object for this position
            var item = this.rows[position];

            View view;

            if (item is Header)
            {
                view               = headers.GetView(((Header)item).SectionIndex, convertView, parent);
                view.Clickable     = false;
                view.LongClickable = false;
                return(view);
            }

            int i = position - 1;

            while (i > 0 && rows[i] is Sample)
            {
                i--;
            }
            Header h = (Header)rows[i];

            view = sections[h.Name].GetView(position - i - 1, convertView, parent);
            view.FindViewById <TextView>(Android.Resource.Id.Text1).Text = ((Sample)item).Name;
            return(view);
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            int sectionnum = 0;

            foreach (var section in sections.Keys)
            {
                var adapter = sections[section];
                int size    = adapter.Count + 1;

                if (position == 0)
                {
                    return(headers.GetView(sectionnum, convertView, parent));
                }
                if (position < size)
                {
                    return(adapter.GetView(position - 1, convertView, parent));
                }

                position -= size;
                sectionnum++;
            }
            return(null);

            /*var view = convertView ?? activity.LayoutInflater.Inflate(Resource.Layout.listviewCliente, parent, false);
             * var textNombre = view.FindViewById<TextView>(Resource.Id.textListViewNombreCliente);
             * var textRut = view.FindViewById<TextView>(Resource.Id.textListViewRUTCliente);
             * textNombre.Text = clientes[position].NombreCompleto;
             * textRut.Text = "RUT: " + clientes[position].Rut;
             * return view;*/
        }
        private int measureContentWidth(ArrayAdapter listAdapter)
        {
            ViewGroup mMeasureParent = null;
            int       maxWidth       = 0;
            View      itemView       = null;
            int       itemType       = 0;

            ArrayAdapter adapter           = listAdapter;
            int          widthMeasureSpec  = View.MeasureSpec.MakeMeasureSpec(0, MeasureSpecMode.Unspecified);
            int          heightMeasureSpec = View.MeasureSpec.MakeMeasureSpec(0, MeasureSpecMode.Unspecified);
            int          count             = adapter.Count;

            for (int i = 0; i < count; i++)
            {
                int positionType = adapter.GetItemViewType(i);
                if (positionType != itemType)
                {
                    itemType = positionType;
                    itemView = null;
                }

                if (mMeasureParent == null)
                {
                    mMeasureParent = new FrameLayout(this);
                }

                itemView = adapter.GetView(i, itemView, mMeasureParent);
                itemView.Measure(widthMeasureSpec, heightMeasureSpec);

                int itemWidth = itemView.MeasuredWidth;

                if (itemWidth > maxWidth)
                {
                    maxWidth = itemWidth;
                }
            }

            return(maxWidth + 40);
        }