我试图让ViewPager只包含ImageView。
但它一直给我这条线上的错误。
((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;
}
}
我不知道从哪里继续。
答案 0 :(得分:3)
通过Android文档,看起来传递给InstantiateItem的第一个参数只是一个包含您的内容的视图,而不一定是ViewPager本身。事实上,不推荐使用View参数的InstantiateItem版本,而不赞成采用ViewGroup的版本。我不确定Xamarin包装器中是否包含此方法,但在任何一种情况下,请尝试转换为ViewGroup而不是ViewPager:
((ViewGroup)collection).AddView (i);
您可能还想将'collection'变量重命名为'container',只是为了清楚您不是将它直接添加到ViewPager,而是将其添加到ViewPager拥有的子视图中。
答案 1 :(得分:1)
尝试以下
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;
}