Xamarin.Android 只有 ImageView 的 ViewPager
Xamarin.Android ViewPager with only ImageViews
我正在尝试制作一个仅包含 ImageView 的 ViewPager。
但它一直在这一行给我错误。
((ViewPager)collection).AddView (i);
System.InvalidCastException: Cannot cast from source type to destination type.
这是我的 ViewPagerAdapter
public class GalleryAdapter : PagerAdapter
{
Context context;
private List<string> mitems;
public GalleryAdapter (Context c, List<string> items)
{
context = c;
mitems = items;
}
public override int Count { get { return mitems.Count; } }
public override Java.Lang.Object InstantiateItem (View collection, int position)
{
ImageView i = new ImageView (context);
//i.LayoutParameters = new Gallery.LayoutParams (150, 100);
i.SetScaleType (ImageView.ScaleType.FitCenter);
Picasso.With (context).Load (mitems [position]).Into (i);
((ViewPager)collection).AddView (i);
return i;
}
public override bool IsViewFromObject (View view, Java.Lang.Object @object)
{
return view == @object;
}
}
我不知道从哪里继续。
查看 Android 文档,传递给 InstantiateItem 的第一个参数似乎只是一个将包含您的内容的视图,不一定是 ViewPager 本身。事实上,采用 View 参数的 InstantiateItem 版本已被弃用,取而代之的是采用 ViewGroup 的版本。我不确定 Xamarin 包装器中是否包含此方法,但无论哪种情况,请尝试转换为 ViewGroup 而不是 ViewPager:
((ViewGroup)collection).AddView (i);
您可能还想将 'collection' 变量重命名为 'container',只是为了清楚您不是将它直接添加到 ViewPager,而是添加到由ViewPager.
尝试以下方法
public override Java.Lang.Object InstantiateItem (View collection, int position)
{
ImageView i = new ImageView (context);
//i.LayoutParameters = new Gallery.LayoutParams (150, 100);
i.SetScaleType (ImageView.ScaleType.FitCenter);
Picasso.With (context).Load (mitems [position]).Into (i);
var viewPager = collection.JavaCast<ViewPager>();
viewpager.AddView (i);
return i;
}
我正在尝试制作一个仅包含 ImageView 的 ViewPager。
但它一直在这一行给我错误。
((ViewPager)collection).AddView (i);
System.InvalidCastException: Cannot cast from source type to destination type.
这是我的 ViewPagerAdapter
public class GalleryAdapter : PagerAdapter
{
Context context;
private List<string> mitems;
public GalleryAdapter (Context c, List<string> items)
{
context = c;
mitems = items;
}
public override int Count { get { return mitems.Count; } }
public override Java.Lang.Object InstantiateItem (View collection, int position)
{
ImageView i = new ImageView (context);
//i.LayoutParameters = new Gallery.LayoutParams (150, 100);
i.SetScaleType (ImageView.ScaleType.FitCenter);
Picasso.With (context).Load (mitems [position]).Into (i);
((ViewPager)collection).AddView (i);
return i;
}
public override bool IsViewFromObject (View view, Java.Lang.Object @object)
{
return view == @object;
}
}
我不知道从哪里继续。
查看 Android 文档,传递给 InstantiateItem 的第一个参数似乎只是一个将包含您的内容的视图,不一定是 ViewPager 本身。事实上,采用 View 参数的 InstantiateItem 版本已被弃用,取而代之的是采用 ViewGroup 的版本。我不确定 Xamarin 包装器中是否包含此方法,但无论哪种情况,请尝试转换为 ViewGroup 而不是 ViewPager:
((ViewGroup)collection).AddView (i);
您可能还想将 'collection' 变量重命名为 'container',只是为了清楚您不是将它直接添加到 ViewPager,而是添加到由ViewPager.
尝试以下方法
public override Java.Lang.Object InstantiateItem (View collection, int position)
{
ImageView i = new ImageView (context);
//i.LayoutParameters = new Gallery.LayoutParams (150, 100);
i.SetScaleType (ImageView.ScaleType.FitCenter);
Picasso.With (context).Load (mitems [position]).Into (i);
var viewPager = collection.JavaCast<ViewPager>();
viewpager.AddView (i);
return i;
}