FragmentPagerAdapter существует только в Android.Support.V4.App (а не Android.App)

Я не могу найти FragmentPagerAdapter в Android.App.

Я не хочу использовать Fragment из Android.Support.V4.App, так как мой целевой API – 14 и выше (Android 4.0 и выше). Итак, я хочу просто использовать простой Android.App.Fragments и связанные классы.

Я только нашел его в Android.Support.V4.App, но этого недостаточно для меня b / c. Я пытаюсь использовать Android.App.Fragment (а не Android.Support.V4.App.Fragment's), и там (Не Android.Support.V4.App), и мой код не будет компилироваться, если я извлечу свой пейджер из FragmentPagerAdapter, если он из библиотеки поддержки, из-за возникшего несоответствия типа между Android.App и Android. Поддержка .V4.App.

Как и в случае с этим здесь Нельзя отличить от android.app.Fragment , есть ли обычный класс пейджера (PagerAdapter), который я должен использовать вместо FragmentPagerAdapter или что-то в этом роде (так же, как вы выходите из обычной Activity, а не FragmentActivity, При настройке API 11 или выше).

Вот пример кода, с которым я работаю (его файл FragmentPagerSupport.cs в решении Support4.sln из примеров MonoDroid, найденных по адресу https://github.com/xamarin/monodroid-samples/tree/master/Support4 ).

Я прокомментировал строки, ссылающиеся на Android.Support.V4.App и заменив их кодом, который ссылается на Android.App. Нет никакого FramePagerAdapter вне Android.Support.V4.App, который я мог бы найти, и мне это действительно нужно).

Благодарю.

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:+' } 

Ugh, вам просто нужно использовать FragmentPagerAdapter из библиотеки поддержки V13

 Android.Support.V13.App.FragmentPagerAdapter 

Затем все другие классы, связанные с фрагментами, могут использоваться из «нормальных» библиотек / пространств имен, за исключением ViewPager, но это не имеет большого значения.


Вот образец для полноты (модифицированный пример «Support4» из 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<Fragment> fragments = new List<Fragment>(); // *** 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<ViewPager>(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<Fragment> _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<Android.Support.V4.App.Fragment> fragments) // : base(fm) public MyAdapter(FragmentManager fm, List<Fragment> 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<TextView>(Resource.Id.text); tv.Text = "# " + _colorIndex; tv.SetBackgroundColor(_colors[_colorIndex++]); return v; } public override void OnActivityCreated(Bundle p0) { base.OnActivityCreated(p0); } } } 

 <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Top-level content view for the simple fragment sample. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:padding="4dip" android:layout_width="match_parent" android:layout_height="match_parent"> <!--android:gravity="center_horizontal"--> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="700dip" android:layout_height="match_parent" android:layout_weight="1" android:background="#FFCCFFFF"> <!--android:layout_width="match_parent"--> </android.support.v4.view.ViewPager> </LinearLayout> 

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen_container" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical|center_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/hello_world" android:background="#FF335555"/> </LinearLayout> 

Добавьте этот dependecy в зависимости от градиента:

 compile 'com.android.support:support-v13:+' 

И используйте android.support.v13.app.FragmentPagerAdapter как это (я просто изменил официальный демонстрационный проект в студии Android: файл → новый → новый проект → следующий → следующий → вкладка → следующий → финал):

 import android.app.Fragment; import android.app.FragmentManager; import android.support.v13.app.FragmentPagerAdapter; import com.google.android.gms.maps.MapFragment; /** A simple FragmentPagerAdapter that returns a MapFragment and a PreferenceFragment. */ public class MainActivityAdapter extends FragmentPagerAdapter { private MapFragment mapFragment; private PreferencesFragment preferencesFragment; public MainActivityAdapter(FragmentManager fm) { super(fm); mapFragment = MapFragment.newInstance(); preferencesFragment = new PreferencesFragment(); } @Override public int getCount() { return 2; } @Override public Fragment getItem(int position) { switch (position) { case 0: return mapFragment; case 1: return preferencesFragment; default: return null; } } }