在Monodroid中覆盖ArrayAdapter的GetItem方法

时间:2012-11-21 08:58:22

标签: android xamarin.android

我有一个类在我的monodroid应用程序中覆盖ArrayAdapter。它用于为文本视图创建自动完成。它的代码是:

class PlacesAutoCompleteAdapter: ArrayAdapter  <String>  ,IFilterable 
{
    private List<String> resultList;

    public PlacesAutoCompleteAdapter(Context context, int textViewResourceId):
        base(context,textViewResourceId)
        {

        }

    public override int Count 
     {
        get 
        {
            return base.Count;
        }
    }

    public override  String GetItem (int position)
    {
        return resultList[position];
    }


}

但它会出现此错误:

 cannot override inherited member 'Android.Widget.ArrayAdapter<string>.GetItem(int)' because it is not marked virtual, abstract, or override (CS0506)

我很困惑。这个错误是什么?当然,GetItem方法在基类中是虚拟的,我使用了覆盖词。这是什么错误?

4 个答案:

答案 0 :(得分:5)

如果扩展ArrayAdapter而不是ArrayAdapter&lt; String&gt;,您将能够覆盖它。并将此签名用于GetItem:

public override Java.Lang.Object GetItem(int position)

答案 1 :(得分:2)

我不确定问题是什么,但我总是继承自 BaseAdapter 并将项目列表作为参数传递给构造函数

这是我如何做的一个例子

public class ImageAdapter : BaseAdapter
    {
            private readonly List<string> _imagesUrls;
            private readonly BaseActivity _activity;

            public ImageAdapter(BaseActivity activity, List<string> imagesUrls)
            {
                    _activity = activity;
                    _imagesUrls = imagesUrls;               
            }

            public override Object GetItem(int position)
            {
                    return null;
            }

            public override long GetItemId(int position)
            {
                    return 0;
            }

            public override View GetView(int position, View convertView, ViewGroup parent)
            {
                    ImageView imageView;

                    if (convertView == null)
                    {
                            imageView = new ImageView(_context);
                            imageView.LayoutParameters = new GridView.LayoutParams(Misc.ImageThumbWidth, Misc.ImageThumbWidth);
                            imageView.SetScaleType(ImageView.ScaleType.CenterCrop);
                            imageView.SetPadding(0, 0, 0, 0);
                    }
                    else
                    {
                            imageView = (ImageView)convertView;
                    }

                    _activity.DisplayImage(_imagesUrls[position], imageView);

                    return imageView;
            }

            public override int Count
            {
                    get { return _imagesUrls.Count; }
            }
    }

请注意,此方法

public override Object GetItem(int position)
{
    return null;
}

对象实际上是 Java.Lang.Object

答案 2 :(得分:0)

ArrayAdapter是一个公共类实现BaseAdapter,它是一个接口。 ArrayAdapter已经实现GetItem(int position)方法an abstract method in BaseAdapter,这是Adapter的继承方法,所以你不需要再次实现它,当然也不允许重写。

答案 3 :(得分:-1)

place(&#34; @ override&#34;)覆盖方法getitem(int)上面的注释

相关问题