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;
}