public void AddFooterView(View v, Object data, bool isSelectable) {
			IListAdapter mAdapter = Adapter;
			if (mAdapter != null && !(mAdapter is HeaderViewGridAdapter)) {
				throw new Java.Lang.IllegalStateException(
					"Cannot add header view to grid -- setAdapter has already been called.");
			}

			ViewGroup.LayoutParams lyp = v.LayoutParameters;

			FixedViewInfo info = new FixedViewInfo();
			FrameLayout fl = new FullWidthFixedViewLayout(Context,this);

			if (lyp != null) {
				v.LayoutParameters=new FrameLayout.LayoutParams(lyp.Width, lyp.Height);
				fl.LayoutParameters=new AbsListView.LayoutParams(lyp.Width, lyp.Height);
			}
			fl.AddView(v);
			info.view = v;
			info.viewContainer = fl;
			info.data = data;
			info.isSelectable = isSelectable;
			_footerViewInfos.Add(info);

			if (mAdapter != null) {
				((HeaderViewGridAdapter) mAdapter).notifyDataSetChanged();
			}
		}
        public void AddFooterView(View v, Java.Lang.Object data, bool isSelectable)
        {
            IListAdapter adapter = (IListAdapter)Adapter;

            if (adapter != null && !(adapter is HeaderFooterViewGridAdapter))
            {
                throw new IllegalStateException("Cannot add footer view to grid -- setAdapter has already been called.");
            }

            FixedViewInfo info = new FixedViewInfo();
            FrameLayout fl = new FullWidthFixedViewLayout(this, Context);
            fl.AddView(v);
            info.view = v;
            info.viewContainer = fl;
            info.data = data;
            info.isSelectable = isSelectable;
            mFooterViewInfos.Add(info);

            // in the case of re-adding a header view, or adding one later on,
            // we need to notify the observer
            if (adapter != null)
            {
                ((HeaderFooterViewGridAdapter)adapter).notifyDataSetChanged();
            }
        }
		/**
     * Add a fixed view to appear at the top of the grid. If addHeaderView is
     * called more than once, the views will appear in the order they were
     * added. Views added using this call can take focus if they want.
     * <p/>
     * NOTE: Call this before calling setAdapter. This is so HeaderGridView can wrap
     * the supplied cursor with one that will also account for header views.
     *
     * @param v            The view to add.
     * @param data         Data to associate with this view
     * @param isSelectable whether the item is selectable
     */
		public void AddHeaderView(View v, Object data, bool isSelectable) {
			IListAdapter adapter = Adapter;
			if (adapter != null && !(adapter is HeaderViewGridAdapter)) {
				throw new Java.Lang.IllegalStateException(
					"Cannot add header view to grid -- setAdapter has already been called.");
			}
			ViewGroup.LayoutParams lyp = v.LayoutParameters;

			FixedViewInfo info = new FixedViewInfo();
			FrameLayout fl = new FullWidthFixedViewLayout(Context,this);
			if (lyp == null) {
				lyp = new ViewGroup.LayoutParams (WindowManagerLayoutParams.MatchParent,WindowManagerLayoutParams.MatchParent);
			}

			if (lyp != null) {
				v.LayoutParameters=new FrameLayout.LayoutParams(lyp.Width, lyp.Height);
				fl.LayoutParameters=new AbsListView.LayoutParams(lyp.Width, lyp.Height);
			}
			fl.AddView(v);
			info.view = v;
			info.viewContainer = fl;
			info.data = data;
			info.isSelectable = isSelectable;
			_headerViewInfos.Add(info);
			// in the case of re-adding a header view, or adding one later on,
			// we need to notify the observer
			if (adapter != null) {
				((HeaderViewGridAdapter) adapter).notifyDataSetChanged();
			}
		}
		public void AddHeaderView(View v, Object data, bool isSelectable)
		{
			IListAdapter adapter = Adapter;
			if (adapter != null && !(adapter is HeaderViewGridAdapter))
			{
				throw new IllegalStateException("Cannot add header view to grid -- setAdapter has already been called.");
			}
			FixedViewInfo info = new FixedViewInfo();
			FrameLayout fl = new FullWidthFixedViewLayout(this, Context);
			fl.AddView(v);
			info.View = v;
			info.ViewContainer = fl;
			info.Data = data;
			info.IsSelectable = isSelectable;
			_mHeaderViewInfos.Add(info);
			// in the case of re-adding a header view, or adding one later on,
			// we need to notify the observer
			if (adapter != null)
			{
				((HeaderViewGridAdapter)adapter).NotifyDataSetChanged();
			}
		}