Я не могу найти найти FragmentPagerAdapter в Android.App.
Я не хочу использовать фрагменты из Android.Support.V4.App, так как мой целевой API - 14 и выше (Android 4.0 и выше). Итак, я хочу просто использовать обычный Android.App.Fragments и связанные с ним классы.
Я нашел его только в Android.Support.V4.App, но мне этого недостаточно, потому что я пытаюсь использовать Android.App.Fragment (не Android.Support.V4.App.Fragment) и там. связанные классы в Android.App (не Android.Support.V4.App), и мой код не будет компилироваться, если я получу свой пейджер из FragmentPagerAdapter, если он из библиотеки поддержки, из-за результирующего несоответствия типов между Android.App и Android.Support .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
. Не уверен, что это поможет вам, но ...Ответы:
Есть один
android.support.v13.app.FragmentPagerAdapter
, который должен делать то, что вы хотите, чтобы он делал. Это FragmentPagerAdapter для не поддерживающих фрагментов.Установка Android Studio
Пожалуйста, добавьте следующие Gradle зависимости
источник
import android.support.v13.app.FragmentPagerAdapter;
ни одной идеи? уверен, что уже добавил компиляцию 'com.android.support:support-v13:23.1.1' в Gradlesupport:support-v13
конфликтsupport:design
в моем случаеТьфу, тебе просто нужно использовать FragmentPagerAdapter из библиотеки поддержки V13
Тогда все другие связанные с фрагментами классы могут использоваться из «обычных» библиотек / пространств имен, за исключением ViewPager, но это не составляет особого труда.
Вот образец для полноты (измененный пример «Support4» от https://github.com/xamarin/monodroid-samples/ ):
источник
Добавьте эту зависимость в зависимости gradle:
И используйте
android.support.v13.app.FragmentPagerAdapter
вот так (я просто изменил официальный демонстрационный проект в Android Studio: файл → новый → новый проект → следующий → следующий → вкладка активность → следующий → закончить):источник
Согласно 2019 с AndroidX
источник
Была такая же проблема. Моим решением было скопировать код из android.support.v4.app.FragmentPagerAdapter, а затем изменить импортированный класс Fragment на android.app.Fragment. После этого сделайте другие незначительные изменения, чтобы удалить все ошибки. К моему удивлению, это работает отлично. IMO это проще, чем добавить библиотеку поддержки, которая вам не нужна.
источник