2012-11-21 2 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이 능가하지 않습니다 – user1682893

0

ArrayAdapter은 인터페이스 인 BaseAdapter을 구현합니다. ArrayAdapter는 이미 Adapter에서 상속 된 메서드 인 an abstract method in BaseAdapterGetItem(int position) 메서드를 구현하므로 다시 구현할 필요가 없으므로 무시할 수 없습니다. 오버라이드 (override) 방식의 getItem 위

+0

다음을 확인하십시오. https : //developers.google.com/academy/apis/maps/places/autocomplete-android 샘플 코드 getItem (int)가 재정의됩니다. – user1682893

+0

기본적으로 Java 메서드는 가상이며 C# 메서드는 가상이 아닙니다. –

0

장소 ("@Override") 주석 대신 ArrayAdapter와 < 문자열 >의 ArrayAdapter와를 확장하고를 GetItem이 서명을 사용하는 경우이 설정을 재정의 할 수

+0

OP는 monodroid에 관한 것입니다. 즉, C#은 Java가 아닙니다. 따라서 @ override는 C#에서 키워드 재정의됩니다. C#에서는 (@Arron이 지적한대로) 메소드가 기본적으로 가상이 아니므로이 경우에는 이 특정 메소드가 가상 또는 대체로 표시되지 않으므로 override 키워드를 사용하지 마십시오. 하지만 자바에서 작동합니다 - 감사합니다. – MemeDeveloper

3

(INT) :

public override Java.Lang.Object GetItem(int position) 
관련 문제