Nie mogę znaleźć FragmentPagerAdapter w Android.App.
Nie chcę używać fragmentów z Android.Support.V4.App, ponieważ mój docelowy interfejs API to 14 lub nowszy (Android 4.0 i nowsze). Chcę więc po prostu użyć zwykłego Android.App.Fragments i skojarzonych z nimi klas.
Znalazłem go tylko w Android.Support.V4.App, ale to mi nie wystarcza b / c Próbuję użyć Android.App.Fragment (nie Android.Support.V4.App.Fragment) i tam pokrewne klasy w Android.App (nie Android.Support.V4.App), a mój kod nie zostanie skompilowany, jeśli wyprowadzę mój pager z FragmentPagerAdapter, jeśli pochodzi z biblioteki Support, z powodu wynikowych niezgodności typów między Android.App i Android.Support .V4.App.
Tak jak w przypadku tutaj Nie można przesłać do android.app.Fragment , czy istnieje "normalna" klasa pagera (PagerAdapter), której powinienem używać zamiast FragmentPagerAdapter czy coś (tak jak wyprowadzasz z normalnej Activity, a nie FragmentActivity, w przypadku kierowania na interfejs API 11 lub nowszy).
Oto przykładowy kod, z którym pracuję (jest to plik FragmentPagerSupport.cs w rozwiązaniu Support4.sln z przykładów MonoDroid znalezionych na https://github.com/xamarin/monodroid-samples/tree/master/Support4 ).
Skomentowałem wiersze odnoszące się do Android.Support.V4.App i zastąpiłem je kodem, który odwołuje się do Android.App. Nie ma FramePagerAdapter poza Android.Support.V4.App, który mógłbym znaleźć i naprawdę go potrzebuję).
Dzięki.
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
. Nie jestem pewien, czy to ci pomoże, ale ...Odpowiedzi:
Jest taki
android.support.v13.app.FragmentPagerAdapter
, który powinien zrobić to, co chcesz. Jest to FragmentPagerAdapter dla fragmentów nieobsługujących.Instalacja Android Studio
Dodaj następujące zależności Gradle
źródło
import android.support.v13.app.FragmentPagerAdapter;
żadnego pomysłu? pewnie dodałem już kompilację „com.android.support:support-v13:23.1.1” do gradlesupport:support-v13
ma konflikt zsupport:design
w moim przypadkuUgh, wystarczy użyć FragmentPagerAdapter z biblioteki obsługi V13
Wtedy wszystkie inne klasy związane z fragmentami mogą być używane z "normalnych" bibliotek / przestrzeni nazw, z wyjątkiem ViewPager, ale to nic wielkiego.
Oto próbka kompletności (zmodyfikowany przykład „Support4” z https://github.com/xamarin/monodroid-samples/ ):
źródło
Dodaj tę zależność do zależności gradle:
I używaj w
android.support.v13.app.FragmentPagerAdapter
ten sposób (po prostu zmodyfikowałem oficjalny projekt demonstracyjny w android studio: plik → nowy → nowy projekt → następny → następny → aktywność z zakładkami → następny → koniec):źródło
Zgodnie z 2019 z AndroidX
źródło
Miałem ten sam problem. Moim rozwiązaniem było skopiowanie kodu z android.support.v4.app.FragmentPagerAdapter, a następnie zmiana zaimportowanej klasy Fragment na android.app.Fragment. Następnie wykonaj inne drobne poprawki, aby usunąć wszystkie błędy. Ku mojemu zdziwieniu działa idealnie. IMO jest to prostsze niż dodanie biblioteki obsługi, której tak naprawdę nie potrzebujesz.
źródło