Não consigo encontrar o FragmentPagerAdapter no Android.App.
Não quero usar os fragmentos do Android.Support.V4.App, pois minha API de destino é 14 e superior (Android 4.0 e superior). Então, eu quero apenas usar simples Android.App.Fragments, e não há classes associadas.
Eu só o encontrei no Android.Support.V4.App, mas isso não é suficiente para mim porque eu estou tentando usar o Android.App.Fragment (não o Android.Support.V4.App.Fragment) e lá classes relacionadas no Android.App (não Android.Support.V4.App), e meu código não será compilado se eu derivar meu pager de FragmentPagerAdapter se for da biblioteca de Suporte, devido à incompatibilidade de tipo resultante entre Android.App e Android.Support .V4.App.
Assim como no caso aqui, não pode ser convertido para android.app.Fragment , existe uma classe pager "normal" (PagerAdapter) que eu deveria estar usando no lugar do FragmentPagerAdapter ou algo assim (assim como você deriva da Activity normal e não FragmentActivity, ao segmentar a API 11 ou superior).
Aqui está o código de exemplo com o qual estou trabalhando (é o arquivo FragmentPagerSupport.cs na solução Support4.sln dos exemplos do MonoDroid encontrados em https://github.com/xamarin/monodroid-samples/tree/master/Support4 ).
Comentei as linhas que referenciavam o Android.Support.V4.App e as substitui pelo código que faz referência ao Android.App. Não há nenhum FramePagerAdapter fora do Android.Support.V4.App que eu possa encontrar e realmente preciso dele).
Obrigado.
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
. Não tenho certeza se isso vai ajudá-lo, mas ...Respostas:
Há um que está dentro
android.support.v13.app.FragmentPagerAdapter
, que deve fazer o que você quer que ele faça. É um FragmentPagerAdapter para fragmentos sem suporte.Instalação do Android Studio
Por favor, siga as dependências Gradle
fonte
import android.support.v13.app.FragmentPagerAdapter;
nenhuma idéia? com certeza já adicionou a compilação 'com.android.support:support-v13:23.1.1' para gradlesupport:support-v13
está em conflito comsupport:design
no meu casoUgh, você só precisa usar o FragmentPagerAdapter da biblioteca de suporte da V13
Todas as outras classes relacionadas ao Fragmento podem ser usadas nas bibliotecas / espaços de nome "normais", com exceção do ViewPager, mas isso não é grande coisa.
Aqui está um exemplo de integridade (exemplo "Support4" modificado em https://github.com/xamarin/monodroid-samples/ ):
fonte
Adicione essa dependência às dependências gradle:
E use
android.support.v13.app.FragmentPagerAdapter
assim (simplesmente modifiquei o projeto de demonstração oficial no android studio: arquivo → novo → novo projeto → próximo → próximo → atividade com guias → próximo → terminar):fonte
De acordo com 2019 com AndroidX
fonte
Teve o mesmo problema. Minha solução foi copiar o código do android.support.v4.app.FragmentPagerAdapter e, em seguida, alterar a classe Fragment importada para android.app.Fragment. Depois, faça outras pequenas adaptações para remover todos os erros. Para minha surpresa, funciona perfeitamente. Na IMO, isso é mais simples do que adicionar uma biblioteca de suporte que você realmente não precisa.
fonte