Beispiel #1
0
        // Workaround from Support.v4 v22.1.1 library:
        //
        // For APIs >= 11 && < 21, there was a framework bug that prevented a LayoutInflater's
        // Factory2 from being merged properly if set after a cloneInContext from a LayoutInflater
        // that already had a Factory2 registered. We work around that bug here. If we can't we
        // log an error.
        private static void ForceSetFactory2(LayoutInflater inflater, LayoutInflater.IFactory2 factory)
        {
            if (!_checkedField)
            {
                try
                {
                    Class layoutInflaterClass = Class.FromType(typeof(LayoutInflater));
                    _layoutInflaterFactory2Field            = layoutInflaterClass.GetDeclaredField("mFactory2");
                    _layoutInflaterFactory2Field.Accessible = true;
                }
                catch (NoSuchFieldException e)
                {
                    Mvx.Error(
                        "ForceSetFactory2 Could not find field 'mFactory2' on class {0}; inflation may have unexpected results.",
                        Class.FromType(typeof(LayoutInflater)).Name);
                }
                _checkedField = true;
            }

            if (_layoutInflaterFactory2Field != null)
            {
                try
                {
                    _layoutInflaterFactory2Field.Set(inflater, (Java.Lang.Object)factory);
                }
                catch (IllegalAccessException e)
                {
                    Mvx.Error("ForceSetFactory2 could not set the Factory2 on LayoutInflater {0} ; inflation may have unexpected results.", inflater);
                }
            }
        }
Beispiel #2
0
    public ViewPumpFactory2(LayoutInflater.IFactory2 factory2)
        : base()
    {
        _factory2 = factory2;

        _factory2ViewCreator = new Factory2ViewCreator(_factory2);
    }
Beispiel #3
0
    public PrivateViewPumpFactory2(LayoutInflater.IFactory2 factory2, ViewPumpLayoutInflater layoutInflater)
        : base()
    {
        _factory2       = factory2;
        _layoutInflater = layoutInflater;

        _privateFactoryViewCreator = new PrivateFactory2ViewCreator(_layoutInflater, _factory2);
    }
 private LayoutInflaterFactoryWrapper(LayoutInflater inflater, IViewFactory viewFactory)
 {
     Should.NotBeNull(inflater, nameof(inflater));
     Should.NotBeNull(viewFactory, nameof(viewFactory));
     _viewFactory = viewFactory;
     _factory = inflater.Factory;
     if (Factory2Field != null)
         _factory2 = inflater.Factory2;
     if (PrivateFactoryField != null)
         _privateFactory = JavaObjectExtensions.JavaCast<LayoutInflater.IFactory2>(PrivateFactoryField.Get(inflater));
 }
Beispiel #5
0
 private LayoutInflaterFactoryWrapper(LayoutInflater inflater, IViewFactory viewFactory)
 {
     Should.NotBeNull(inflater, nameof(inflater));
     Should.NotBeNull(viewFactory, nameof(viewFactory));
     _viewFactory = viewFactory;
     _factory     = inflater.Factory;
     if (Factory2Field != null)
     {
         _factory2 = inflater.Factory2;
     }
     if (PrivateFactoryField != null)
     {
         _privateFactory = JavaObjectExtensions.JavaCast <LayoutInflater.IFactory2>(PrivateFactoryField.Get(inflater));
     }
 }
Beispiel #6
0
 public Factory2ViewCreator(LayoutInflater.IFactory2 factory2)
     : base()
 {
     _factory2 = factory2;
 }
 public PrivateFactory2ViewCreator(ViewPumpLayoutInflater layoutInflater, LayoutInflater.IFactory2 factory2)
     : base(layoutInflater)
 {
     _factory2 = factory2;
 }