J. Joe
J. Joe

Reputation: 381

I got some errors when I create an header listview on xamarin android

  public class CustomAdapter : BaseAdapter{

	private  const int TYPE_ITEM = 0;
	private const int TYPE_SEPARATOR = 1;

	private List<String> mData;
	private TreeSet sectionHeader;

	private LayoutInflater mInflater;

	public CustomAdapter(Context context) {
		mInflater = (LayoutInflater) context
			.GetSystemService(Context.LayoutInflaterService);
	}

	public void addItem( String item) {
		mData.Add(item);
		NotifyDataSetChanged();
	}

	public void addSectionHeaderItem(String item) {
		mData.Add(item);
		sectionHeader.Add(mData.Count - 1);
		NotifyDataSetChanged();
	}

	public int getItemViewType(int position) {
		return sectionHeader.Contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
	}


	public int getViewTypeCount {
		get{ return 2; }
	}


	public override int Count {
		get {return mData.Count;}
	}


	public override GetItem this[int position] {
		get{ return mData [position]; }
	}
		
	public override long GetItemId(int position) {
		return position;
	} 

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		int rowType = getItemViewType(position);

		if (convertView == null) {
			holder = new ViewHolder();
			switch (rowType) {
			case TYPE_ITEM:
				convertView = mInflater.Inflate(Resource.Layout.textViewItemsSeparator, parent);
				holder.textView = (TextView) convertView.FindViewById(Resource.Id.textviewHeaderItems);
				break;
			case TYPE_SEPARATOR:
				convertView = mInflater.Inflate(Resource.Layout.textViewHeaderItems, parent);
				holder.textView = (TextView) convertView.FindViewById(Resource.Id.textviewItemsSeparator);
				break;
			}
			convertView.Tag=holder;
		} else {
			holder = (ViewHolder)convertView.Tag as ViewHolder;
		}
		holder.textView.Text=mData[position];

		return convertView;
	}

	public  class ViewHolder:Java.Lang.Object {
		public TextView textView;
	}

OnActivityCreated:
mAdapter=new CustomAdapter(this);
			for (int i = 0; i <= items.Count; i++) {
				mAdapter.addItem (items [i].ToString ());
				if (i == 0) {
					mAdapter.addSectionHeaderItem ("Music");
				} else if(i==13) {
					mAdapter.addSectionHeaderItem ("Audio");
				}
			}
			lst.Adapter = new CustomAdapter (Activity, mAdapter);

Create your custom adapter for ListView

You must override getViewTypeCount() method. This method returns the number of types of Views that will be created by getView method.

I was trying to create a header listview.

Upvotes: 1

Views: 128

Answers (1)

nullpotent
nullpotent

Reputation: 9260

Set the text using the property of a TextView

holder.textView.Text = mData[position];

Under the hood, Xamarin converts the C# string to Java CharSequence and calls setText for you.


P.S

You have to look at the documentation! It is a must when you're a beginner.

Upvotes: 1

Related Questions