2

我有一个在我的 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

4 回答 4

5

如果您扩展 ArrayAdapter 而不是 ArrayAdapter<String> 并将此签名用于 GetItem,您将能够覆盖它:

public override Java.Lang.Object GetItem(int position)
于 2015-03-11T10:53:32.263 回答
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;
}

Object实际上是Java.Lang.Object

于 2012-11-21T09:05:11.113 回答
0

ArrayAdapter是一个公共类实现BaseAdapter是一个接口。ArrayAdapter 已经实现了BaseAdapter 中的抽象方法,GetItem(int position)它是从Adapter继承的方法,因此您不需要再次实现它,当然也不允许覆盖。

于 2012-11-21T18:27:53.250 回答
-2

place ("@override") 被覆盖方法 getitem(int) 上面的注解

于 2014-12-23T08:35:24.807 回答