【发布时间】:2019-09-14 21:16:16
【问题描述】:
我在 Android.App 中找不到 FragmentPagerAdapter。
我不想使用 Android.Support.V4.App 中的 Fragment,因为我的目标 API 是 14 及更高版本(Android 4.0 及更高版本)。所以,我只想使用普通的 Android.App.Fragments, 以及相关的类。
我只在 Android.Support.V4.App 中找到它,但这还不够 对我来说 b/c 我正在尝试使用 Android.App.Fragment 的(不是 Android.Support.V4.App.Fragment 的) 并且在Android.App(不是Android.Support.V4.App)中有相关的类,我的代码不会 如果我从支持库中派生出我的寻呼机,则编译, 因为导致 Android.App 和 Android.Support.V4.App 之间的类型不匹配。
就像这里Cannot be cast to android.app.Fragment 的情况一样,是否有一个“普通”寻呼机(PagerAdapter)类我应该使用 FragmentPagerAdapter 或其他东西的位置(就像您从正常的 Activity 派生一样,并且 不是 FragmentActivity,当面向 API 11 或更高版本时)。
这是我正在使用的示例代码(它是位于 https://github.com/xamarin/monodroid-samples/tree/master/Support4 的 MonoDroid 示例中 Support4.sln 解决方案中的 FragmentPagerSupport.cs 文件)。
我已注释掉引用 Android.Support.V4.App 的行并将其替换为 引用 Android.App 的代码。 Android.Support.V4.App 之外没有我能找到的 FramePagerAdapter,我真的需要它。
谢谢。
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中有一个。不确定这是否对您有帮助,但是... -
PearsonArtPhoto 不确定,因为没有 Android.Support.V13.View 命名空间(无论如何在 MonoDroid 中)。我宁愿根本不使用支持库,但我认为目前还不可能。
-
看起来 ViewPager 也只存在于支持库中......
-
developer.android.com/reference/android/support/v4/view/… 类概述部分很好地总结了这种困境 - “注意这个类目前处于早期设计和开发阶段。API 可能会在以后的兼容性库更新中发生变化,需要更改应用程序在针对较新版本编译时的源代码。”
-
另一个来自文档developer.android.com/tools/extras/support-library.html 的摘录“v4 的支持库提供了对 Android 3.0 及更高版本引入的几个类的访问,以及现有类的一些更新版本,甚至是一些当前不支持的 API” t存在于Android平台”。但是,他们为什么会在支持库中专门留下如此重要的片段“API”,如果它的其余部分存在于外部。也许是疏忽?
标签: android android-fragments xamarin.android fragmentpageradapter