FragmentPagerAdapter Exists Only In Android.Support.V4.App (and not Android.App)

后端 未结 5 875
灰色年华
灰色年华 2020-12-12 14:54

I cannot find find FragmentPagerAdapter within Android.App.

I do not want to use the Fragment\'s from Android.Support.V4.App, as my target API is 14 and higher (Andr

5条回答
  •  感动是毒
    2020-12-12 15:26

    Ugh, you just need to use the FragmentPagerAdapter from the V13 support library

    Android.Support.V13.App.FragmentPagerAdapter
    

    Then all other Fragment related classes can be used from the "normal" libraries/namespaces, with the exception of ViewPager, but that's no big deal.


    Here's a sample for completeness (modified "Support4" example from https://github.com/xamarin/monodroid-samples/):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Util;
    using Android.Views;
    using Android.Widget;
    
    using Java.Lang;
    
    using Android.Support.V4.View;
    using Fragment = Android.App.Fragment;
    
    namespace Support4
    {
        [Activity (Label = "@string/fragment_pager_support")]
        [IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })]
        public class FragmentPagerSupport : Activity
        //public class FragmentPagerSupport : FragmentActivity
        {
            const int NUM_ITEMS = 4;
    
            protected MyAdapter _pagerAdapter;
            protected ViewPager _viewPager;
    
            protected override void OnCreate (Bundle bundle)
            {
                base.OnCreate (bundle);
    
                SetContentView(Resource.Layout.fragment_pager);
    
                List fragments = new List();
    
                // *** MonoDroid 4.2.7 letter case bug *** make's first letter lower.
    
                //string typeName = typeof(Fragment1).FullName;
                string typeName = "support4." + typeof(Fragment1).Name;
    
                fragments.Add(Fragment.Instantiate(this, typeName));
                fragments.Add(Fragment.Instantiate(this, typeName));
                fragments.Add(Fragment.Instantiate(this, typeName));
                fragments.Add(Fragment.Instantiate(this, typeName));
    
                //adapter = new MyAdapter(SupportFragmentManager);
                _pagerAdapter = new MyAdapter(FragmentManager, fragments);
    
                _viewPager = FindViewById(Resource.Id.view_pager);
                _viewPager.Adapter = _pagerAdapter;
            }
    
            public override bool OnTouchEvent(MotionEvent e)
            {
                return base.OnTouchEvent(e);
            }
    
            protected class MyAdapter : Android.Support.V13.App.FragmentPagerAdapter
            {
                private List _fragments;
    
                public override Java.Lang.Object  InstantiateItem(View p0, int p1)
                {
                    return base.InstantiateItem(p0, p1);
                }
    
                public MyAdapter(Android.App.FragmentManager fm)
                    : base(fm)
                {
    
                }
    
                //public MyAdapter(Android.Support.V4.App.FragmentManager fm, List fragments)
                //    : base(fm)
                public MyAdapter(FragmentManager fm, List fragments)
                    : base(fm)
                {
                    _fragments = fragments;
                }
    
                public override int Count {
                    get {
                        return NUM_ITEMS;
                    }
                }
    
                //public override Android.Support.V4.App.Fragment GetItem(int p0)
                public override Fragment GetItem(int p0)
                {
                    return _fragments[p0];
                }
    
                public override float GetPageWidth(int p0)
                {
                    //return base.GetPageWidth(p0);
                    //base.GetPageWidth(p0);
    
                    return (float)(0.5f);
                }
            }
        }
    
        //public class Fragment1 : Android.Support.V4.App.Fragment
        public class Fragment1 : Fragment
        {
            int num;
    
            private static int _colorIndex = 0;
            private static Android.Graphics.Color[] _colors = new[] { Android.Graphics.Color.Aqua, Android.Graphics.Color.DarkViolet,
            Android.Graphics.Color.Coral, Android.Graphics.Color.Bisque};
    
            public Fragment1()
            {
            }
    
            public Fragment1(int num)
            {
                var args = new Bundle();
                args.PutInt("num", num);
                Arguments = args;
            }
    
            public override void OnCreate(Bundle p0)
            {
                base.OnCreate(p0);
    
                num = Arguments != null ? Arguments.GetInt("num") : 1;
            }
    
            public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                View v = inflater.Inflate(Resource.Layout.aaaaa, container, false);
    
                TextView tv = v.FindViewById(Resource.Id.text);
                tv.Text = "# " + _colorIndex;
                tv.SetBackgroundColor(_colors[_colorIndex++]);
    
                return v;
            }
    
            public override void OnActivityCreated(Bundle p0)
            {
                base.OnActivityCreated(p0);
            }
        }
    }
    

    
    
    
    
    
    
      
    
      
    
        
      
    
    
    

    
    
    
      
    
    
    

提交回复
热议问题