public MvxHorizontalGridView(Context context, IAttributeSet attrs, int defStyle, IMvxRecyclerAdapter adapter) : base(context, attrs, defStyle)
		{
			// Note: Any calling derived class passing a null adapter is responsible for setting
			// it's own itemTemplateId
			if (adapter == null)
				return;

			var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId(context, attrs);

			adapter.ItemTemplateId = itemTemplateId;
            Adapter = adapter;

			var typedArray = context.ObtainStyledAttributes(attrs, Resource.Styleable.MvxHorizontalGridView);
			try
			{
				FocusFirstChildOnLaidOut = typedArray.GetBoolean(Resource.Styleable.MvxHorizontalGridView_FocusFirstChildOnLaidOut, false);
				if (FocusFirstChildOnLaidOut)
				{
					SetOnChildLaidOutListener(new MvxFocusFirstChildOnChildLaidOutListener());
				}
			}
			finally
			{
				typedArray.Recycle();
			}

			// We need this listener to get information about the currently _selected_ item
			// Overriding setter of base.SelectedPosition is not enough!
			OnChildViewHolderSelectedListener = new MvxOnChildViewHolderSelectedListener();
			SetOnChildViewHolderSelectedListener(OnChildViewHolderSelectedListener);
		}
        public MvxHorizontalGridView(Context context, IAttributeSet attrs, int defStyle, IMvxRecyclerAdapter adapter) : base(context, attrs, defStyle)
        {
            // Note: Any calling derived class passing a null adapter is responsible for setting
            // it's own itemTemplateId
            if (adapter == null)
                return;

            var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId(context, attrs);

			adapter.ItemTemplateId = itemTemplateId;
            Adapter = adapter;

			// We need this listener to get information about the currently _selected_ item
	        OnChildViewHolderSelectedListener = new MvxOnChildViewHolderSelectedListener();
            SetOnChildViewHolderSelectedListener(OnChildViewHolderSelectedListener);
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (OnChildViewHolderSelectedListener != null)
                {
                    OnChildViewHolderSelectedListener.Dispose();
                    OnChildViewHolderSelectedListener = null;
                }
            }

            base.Dispose(disposing);
        }