1. ホーム
  2. android

[解決済み] Android.Support.V4.Appにのみ存在するFragmentPagerAdapter(Android.Appには存在しない)。

2022-04-24 16:56:10

質問

Android.Appの中にFragmentPagerAdapterが見当たらないのですが。

Android.Support.V4.AppのFragmentは使いたくありません。 14以上(Android 4.0以上)です。そこで、Android.App.Fragmentsのプレーンなものだけを使いたいのです。 とそれに関連するクラスです。

Android.Support.V4.Appの中でしか見つけられませんでしたが、これでは十分ではありません。 Android.App.Fragment(Android.Support.V4.App.Fragmentではありません)を使いたいからです。 とAndroid.App(Android.Supp.V4.Appではない)内の関連クラスがあり、私のコードは サポートライブラリのページャーを FragmentPagerAdapter から派生させると、コンパイルされます。 Android.AppとAndroid.Support.V4.Appの間で型の不一致が発生するからです。

ここでのケースと同じように android.app.Fragmentにキャストできません。 ページャー(PagerAdapter)クラスはありますか? をFragmentPagerAdapterに置き換えるか、あるいは何か(通常のActivityから派生し API 11以上をターゲットとする場合、FragmentActivityではありません)。

以下は、私が扱っているサンプルコードです(以下のMonoDroidサンプルにあるSupport4.slnソリューション内のFragmentPagerSupport.csファイル)。 https://github.com/xamarin/monodroid-samples/tree/master/Support4 ).

Android.Supp.V4.Appを参照している行をコメントアウトし、その行を Android.Appを参照するコード。私が見つけたAndroid.Support.V4.App以外のFramePagerAdapterはなく、私は本当にそれを必要とします)。

ありがとうございます。

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.Views;
using Android.Widget;
//using Android.Support.V4.App;
//using Android.Support.V4.View;

namespace Support4
{
    [Activity (Label = "@string/fragment_pager_support")]
    [IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })]
    //public class FragmentPagerSupport : FragmentActivity
        public class FragmentPagerSupport : Activity
    {
        const int NUM_ITEMS = 10;
        MyAdapter adapter;
        ViewPager pager;

        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            SetContentView(Resource.Layout.fragment_pager);

            //adapter = new MyAdapter(SupportFragmentManager);
                        adapter = new MyAdapter(FragmentManager);

            pager = FindViewById<ViewPager>(Resource.Id.pager);
            pager.Adapter = adapter;

            var button = FindViewById<Button>(Resource.Id.goto_first);
            button.Click += (sender, e) => {
                pager.CurrentItem = 0;  
            };
            button = FindViewById<Button>(Resource.Id.goto_last);
            button.Click += (sender, e) => {
                pager.CurrentItem = NUM_ITEMS - 1;
            };
        }

                // ?????????????????????????????????????????????????
                // - where is FragmentPagerAdapter 
                // ?????????????????????????????????????????????????

        protected class MyAdapter : FragmentPagerAdapter 
        {
            public MyAdapter(FragmentManager fm) : base(fm)
            {
            }

            public override int Count {
                get {
                    return NUM_ITEMS;
                }
            }

            public override Fragment GetItem (int position)
            {
                return new ArrayListFragment(position);
            }


        }

        protected class ArrayListFragment : ListFragment
        {
            int num;

            public ArrayListFragment()
            {
            }

            public ArrayListFragment(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)
            {
                var v = inflater.Inflate(Resource.Layout.fragment_pager_list, container, false);
                var tv = v.FindViewById<TextView>(Resource.Id.text);
                tv.Text = "Fragment #" + num;
                return v;
            }

            public override void OnActivityCreated (Bundle p0)
            {
                base.OnActivityCreated (p0);

                ListAdapter = new ArrayAdapter<string>(Activity, Android.Resource.Layout.SimpleListItem1, Cheeses.cheeseStrings);
            }

            public override void OnListItemClick(ListView l, View v, int position, long id) {
                Console.WriteLine ( "Item clicked: " + id);
            }
        }
    }
}

解決方法は?

にあるものがあります。 android.support.v13.app.FragmentPagerAdapter これは、あなたがしたいことをするはずです。これは、非サポートフラグメントのための FragmentPagerAdapter です。

Android Studioのインストール

以下のGradleの依存関係を追加してください。

dependencies {
    compile 'com.android.support:support-v13:+'
}