Android fragments 在Android 4.0和4.1中使用ViewPager/ChildFragmentManager
我的Xamarin Android应用程序对每个视图使用片段,而不是单独的活动,其中一个片段需要包含一个用于照片滑块的ViewPager 据我所见,ViewPager必须绑定到使用片段的适配器。这是有问题的,因为这意味着片段中有一个片段,必须使用ChildFragmentManager,Android 4.2之前的版本不支持它。我的应用程序需要在安卓4.0+上运行,所以我需要如何解决这个问题的指导 我的一些想法Android fragments 在Android 4.0和4.1中使用ViewPager/ChildFragmentManager,android-fragments,android-viewpager,xamarin.android,xamarin,Android Fragments,Android Viewpager,Xamarin.android,Xamarin,我的Xamarin Android应用程序对每个视图使用片段,而不是单独的活动,其中一个片段需要包含一个用于照片滑块的ViewPager 据我所见,ViewPager必须绑定到使用片段的适配器。这是有问题的,因为这意味着片段中有一个片段,必须使用ChildFragmentManager,Android 4.2之前的版本不支持它。我的应用程序需要在安卓4.0+上运行,所以我需要如何解决这个问题的指导 我的一些想法 有没有办法将其他类型的适配器绑定到不使用片段的ViewPager?在我的例子中,我所
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="200dip"
android:id="@+id/property_details_image_gallery" />
private ViewPager gallery;
gallery = view.FindViewById<ViewPager> (Resource.Id.property_details_image_gallery);
gallery.Adapter = new ImagePagerAdapter (ChildFragmentManager, 0, facts.PhotoUris);
gallery.SetOnPageChangeListener (this);
public class ImagePagerAdapter : FragmentPagerAdapter
{
private int resourceId;
private List<string> photos;
public ImagePagerAdapter (FragmentManager fragmentManager, int resourceId, List<string> photos) : base(fragmentManager)
{
this.resourceId = resourceId;
this.photos = photos;
if (photos.Count == 0)
photos.Add (string.Empty); // If there are no photos, we add a single photo that will result in a 'noimage' photo
}
public override Fragment GetItem (int position)
{
// Instantiate a new fragment
ImageGalleryFragment fragment = new ImageGalleryFragment (photos[position], position);
return fragment;
}
public override long GetItemId (int position)
{
return position;
}
public override int Count {
get {
return photos.Count;
}
}
}
私人寻呼机图库;
gallery=view.findviewbyd(Resource.Id.property\u details\u image\u gallery);
gallery.Adapter=newImagePageRadapter(ChildFragmentManager,0,facts.PhotoUris);
gallery.SetOnPageChangeListener(此);
公共类ImagePagerAdapter:FragmentPagerAdapter
{
私有资源ID;
私人名单照片;
公共ImagePagerAdapter(FragmentManager FragmentManager,int resourceId,列表照片):基本(FragmentManager)
{
this.resourceId=resourceId;
this.photos=照片;
如果(photos.Count==0)
photos.Add(string.Empty);//如果没有照片,我们将添加一张照片,这将导致“noimage”照片
}
公共重写片段GetItem(int位置)
{
//实例化一个新片段
ImageGalleryFragment=新的ImageGalleryFragment(照片[位置],位置);
返回片段;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖整数计数{
得到{
返回照片。计数;
}
}
}
我3天前才开始使用Xamarin,所以请温柔点。:) 我可以通过让ImagePagerAdapter直接从PagerAdapter继承来实现这一点
public class ImagePagerAdapter : PagerAdapter {
private List<string> data;
private Context context;
public ImagePagerAdapter(Context context, List<string> data) {
this.context = context;
this.data = data;
}
public override Java.Lang.Object InstantiateItem(View collection, int position) {
// Create new image view
var uri = data [position];
var imageView = new ImageView(context);
var defaultImage = context.Resources.GetDrawable (Resource.Drawable.noimage);
imageView.SetUrlDrawable (uri, defaultImage);
// Add image view to pager
var viewPager = collection as ViewPager;
viewPager.AddView(imageView);
return imageView;
}
public override void DestroyItem(View collection, int position, Java.Lang.Object view) {
var viewPager = collection as ViewPager;
viewPager.RemoveView(view as View);
}
public override bool IsViewFromObject(View view, Java.Lang.Object obj) {
return view == obj;
}
public override IParcelable SaveState() {
return null;
}
public override void StartUpdate(View arg0) {
}
public override void FinishUpdate(View arg0) {
}
public override int Count {
get {
return data != null ? data.Count : 0;
}
}
}
公共类ImagePagerAdapter:PagerAdapter{
私人名单数据;
私人语境;
公共ImagePagerAdapter(上下文、列表数据){
this.context=上下文;
这个数据=数据;
}
public override Java.Lang.Object实例化项(视图集合,int位置){
//创建新的图像视图
var uri=数据[位置];
var imageView=新的imageView(上下文);
var defaultImage=context.Resources.GetDrawable(Resource.Drawable.noimage);
imageView.SetUrlDrawable(uri,defaultImage);
//将图像视图添加到寻呼机
var viewPager=作为viewPager的集合;
viewPager.AddView(imageView);
返回图像视图;
}
公共覆盖项(视图集合、int位置、Java.Lang.Object视图){
var viewPager=作为viewPager的集合;
viewPager.RemoveView(视图为视图);
}
public override bool IsViewFromObject(视图,Java.Lang.Object obj){
返回视图==obj;
}
public override iparceable SaveState(){
返回null;
}
公共覆盖无效启动日期(视图arg0){
}
公共覆盖无效FinishUpdate(视图arg0){
}
公共覆盖整数计数{
得到{
返回数据!=null?数据。计数:0;
}
}
}
改用SupportFragmentManager。