/// <summary>
 ///     Initializes a new instance of the <see cref="ItemsSourceAdapter" /> class.
 /// </summary>
 public ItemsSourceAdapter([NotNull] object container, Context context, bool listenCollectionChanges, string dropDownItemTemplateSelectorName = null,
     string itemTemplateSelectorName = AttachedMemberConstants.ItemTemplateSelector, string dropDownItemTemplateIdName = null,
     string itemTemplateIdName = AttachedMemberConstants.ItemTemplate)
 {
     Should.NotBeNull(container, "container");
     _container = container;
     _itemTemplateProvider = new DataTemplateProvider(container, itemTemplateIdName, itemTemplateSelectorName);
     _dropDownTemplateProvider = new DataTemplateProvider(container,
         dropDownItemTemplateIdName ?? AttachedMembers.AdapterView.DropDownItemTemplate,
         dropDownItemTemplateSelectorName ?? AttachedMembers.AdapterView.DropDownItemTemplateSelector);
     _layoutInflater = context.GetBindableLayoutInflater();
     if (listenCollectionChanges)
         _weakHandler = ReflectionExtensions.MakeWeakCollectionChangedHandler(this, (adapter, o, arg3) => adapter.OnCollectionChanged(o, arg3));
     var activityView = context.GetActivity() as IActivityView;
     if (activityView != null)
     {
         _listener = ReflectionExtensions.CreateWeakEventHandler<ItemsSourceAdapter, EventArgs>(this, (adapter, o, arg3) => adapter.ActivityViewOnDestroyed((Activity)o));
         activityView.Mediator.Destroyed += _listener.Handle;
     }
 }
 public ItemsSourceAdapter([NotNull] object container, Context context, bool listenCollectionChanges, string dropDownItemTemplateSelectorName = null,
     string itemTemplateSelectorName = null, string dropDownItemTemplateName = null, string itemTemplateName = null)
 {
     Should.NotBeNull(container, "container");
     _container = container;
     container.TryGetBindingMemberValue(AttachedMembers.Object.StableIdProvider, out _stableIdProvider);
     _itemTemplateProvider = new DataTemplateProvider(container, itemTemplateName ?? AttachedMemberConstants.ItemTemplate,
         itemTemplateSelectorName ?? AttachedMemberConstants.ItemTemplateSelector);
     _dropDownTemplateProvider = new DataTemplateProvider(container,
         dropDownItemTemplateName ?? AttachedMembers.AdapterView.DropDownItemTemplate,
         dropDownItemTemplateSelectorName ?? AttachedMembers.AdapterView.DropDownItemTemplateSelector);
     _layoutInflater = context.GetBindableLayoutInflater();
     if (listenCollectionChanges)
         _weakHandler = ReflectionExtensions.MakeWeakCollectionChangedHandler(this, (adapter, o, arg3) => adapter.OnCollectionChanged(o, arg3));
     var activityView = context.GetActivity() as IActivityView;
     if (activityView != null)
     {
         _listener = ReflectionExtensions.CreateWeakEventHandler<ItemsSourceAdapter, EventArgs>(this, (adapter, o, arg3) => adapter.ActivityViewOnDestroyed((Activity)o));
         activityView.Mediator.Destroyed += _listener.Handle;
     }
     _defaultDropDownTemplate = IsSpinner()
         ? global::Android.Resource.Layout.SimpleDropDownItem1Line
         : global::Android.Resource.Layout.SimpleSpinnerDropDownItem;
     var absListView = container as AdapterView;
     if (absListView != null)
     {
         var member = BindingServiceProvider.MemberProvider.GetBindingMember(absListView.GetType(), AttachedMembers.ViewGroup.DisableHierarchyListener, false, false);
         if (member.CanWrite)
             member.SetSingleValue(absListView, Empty.TrueObject);
     }
 }
 public void SetListener(Context context, DrawerLayout.IDrawerListener listener)
 {
     _listener = listener;
     if (!(listener is ActionBarDrawerToggle))
         return;
     var activity = context.GetActivity() as IActivityView;
     if (activity == null)
         return;
     activity.Mediator.OptionsItemSelected += OptionsItemSelected;
     activity.Mediator.ConfigurationChanged += OnConfigurationChanged;
     activity.Mediator.PostCreate += OnPostCreate;
 }
 protected virtual void StartActivity(Context context, Intent intent, IDataContext dataContext)
 {
     var activity = context.GetActivity();
     Action<Context, Intent, IDataContext> startAction = null;
     if (activity != null)
         startAction = activity.GetBindingMemberValue(AttachedMembers.Activity.StartActivityDelegate);
     if (startAction == null)
         context.StartActivity(intent);
     else
         startAction(context, intent, dataContext);
 }
 protected void TryListenActivity(Context context)
 {
     var activity = context.GetActivity();
     var activityView = activity as IActivityView;
     if (activityView == null)
         Tracer.Warn("{0} - The type {1} does not implement the IActivityView.", this, context);
     else
     {
         InitializeListener();
         activityView.Mediator.Destroyed += _listener.Handle;
     }
 }