Je ne trouve pas FragmentPagerAdapter dans Android.App.
Je ne souhaite pas utiliser les fragments d'Android.Support.V4.App, car mon API cible est de 14 et plus (Android 4.0 et plus). Donc, je veux simplement utiliser Android.App.Fragments, et les classes associées.
Je ne l'ai trouvé que dans Android.Support.V4.App, mais cela ne me suffit pas car j'essaie d'utiliser Android.App.Fragment (pas Android.Support.V4.App.Fragment's) et là classes associées dans Android.App (pas Android.Support.V4.App), et mon code ne sera pas compilé si je dérive mon pager de FragmentPagerAdapter s'il provient de la bibliothèque de support, en raison de l'incompatibilité de type qui en résulte entre Android.App et Android.Support .V4.App.
Tout comme dans le cas ici Ne peut pas être converti en android.app.Fragment , y a-t-il une classe de pager "normal" (PagerAdapter) que je devrais utiliser à la place de FragmentPagerAdapter ou quelque chose (tout comme vous dérivez de l'activité normale, et non de FragmentActivity, lorsque vous ciblez l'API 11 ou une version ultérieure).
Voici l'exemple de code avec lequel je travaille (c'est le fichier FragmentPagerSupport.cs dans la solution Support4.sln à partir des exemples MonoDroid trouvés à https://github.com/xamarin/monodroid-samples/tree/master/Support4 ).
J'ai commenté les lignes faisant référence à Android.Support.V4.App et les ai remplacées par du code faisant référence à Android.App. Il n'y a pas de FramePagerAdapter en dehors d'Android.Support.V4.App que je pourrais trouver, et j'en ai vraiment besoin).
Merci.
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
. Je ne sais pas si cela vous aidera, mais ...Réponses:
Il y en a un qui est
android.support.v13.app.FragmentPagerAdapter
dedans, qui devrait faire ce que vous voulez qu'il fasse. C'est un FragmentPagerAdapter pour les fragments non pris en charge.Installation d'Android Studio
Veuillez ajouter les dépendances suivantes de Gradle
la source
import android.support.v13.app.FragmentPagerAdapter;
aucune idée? sûr ont déjà ajouté compile 'com.android.support:support-v13:23.1.1' à gradlesupport:support-v13
a un conflit avecsupport:design
dans mon casUgh, il vous suffit d'utiliser le FragmentPagerAdapter de la bibliothèque de support V13
Ensuite, toutes les autres classes liées à Fragment peuvent être utilisées à partir des bibliothèques / espaces de noms "normaux", à l'exception de ViewPager, mais ce n'est pas grave.
Voici un exemple d'exhaustivité (exemple "Support4" modifié de https://github.com/xamarin/monodroid-samples/ ):
la source
Ajoutez cette dépendance aux dépendances gradle:
Et utilisez
android.support.v13.app.FragmentPagerAdapter
comme ceci (j'ai simplement modifié le projet de démonstration officiel dans Android Studio: fichier → nouveau → nouveau projet → suivant → suivant → activité à onglets → suivant → terminer):la source
À partir de 2019 avec AndroidX
la source
Eu le même problème. Ma solution était de copier le code de android.support.v4.app.FragmentPagerAdapter, puis de changer la classe Fragment importée en android.app.Fragment. Ensuite, effectuez d'autres adaptations mineures pour supprimer toutes les erreurs. À ma grande surprise, cela fonctionne parfaitement. IMO, c'est plus simple que d'ajouter une bibliothèque de support dont vous n'avez pas vraiment besoin.
la source