2012-11-21 82 views
1

我有一個類,在我的monodroid應用程序中覆蓋ArrayAdapter。它用於爲文本視圖創建自動完成。它的代碼是:在Monodroid覆蓋ArrayAdapter的GetItem方法

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方法在基類中是虛擬的,我使用覆蓋詞。這個錯誤是什麼?

回答

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中

+0

通過基礎適配器,我可以使返回類型的字符串,也覆蓋方法佛Ifiltrable不能accasble – user1682893

0

ArrayAdapter是一個公共類實現BaseAdapter這是一個接口。 ArrayAdapter已經實現GetItem(int position)方法,它是an abstract method in BaseAdapter這是從Adapter繼承的方法,所以你不需要再次實現它,覆蓋當然是不允許的。

+0

請看看這個:https://developers.google.com/academy/apis/maps/places/autocomplete-android在這示例代碼getItem(int)被覆蓋。 – user1682893

+0

默認情況下,JAVA方法是虛擬的,而C#方法是非虛擬的。 –

0

的地方( 「@override」)註釋上述覆蓋方法的GetItem(INT)

+0

OP是關於monodroid的,即C#不是Java:所以沒有@覆蓋,在C#中它將是關鍵字覆蓋,並且在C#中(作爲@Arron He指出)方法默認情況下不是虛擬的,所以在這種情況下,您可以不使用override關鍵字 - 因爲此特定方法未標記爲虛擬或覆蓋。但在Java中,將工作 - 謝謝。 – MemeDeveloper

3

您將能夠覆蓋它,如果你延長,而不是ArrayAdapter <字符串> ArrayAdapter和使用該簽名的GetItem:

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