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

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です

于 2012-11-21T09:05:11.113 に答える
0

ArrayAdapterは、インターフェイスであるBaseAdapterを実装する public クラスです。ArrayAdapter は、 Adapterから継承されたメソッドであるBaseAdapter の抽象メソッドでGetItem(int position)あるメソッドを既に実装しているため、再度実装する必要はなく、オーバーライドはもちろん許可されていません。

于 2012-11-21T18:27:53.250 に答える
-2

place ("@override") オーバーライドされたメソッド getitem(int) の上の注釈

于 2014-12-23T08:35:24.807 に答える