2013-11-08 2 views
1

Следующий код является типичным адаптер расширяет BaseAdapter для GalleryView/GridView и т.д .:Нужно ли нам реализовать все абстрактные методы в Android?

public class GalleryImageAdapter extends BaseAdapter 
{ 
    private Context mContext; 

    private Integer[] ImageIds = { 
      R.drawable.image1, 
      R.drawable.image2, 
      R.drawable.image3   
    }; 

    public GalleryImageAdapter(Context context) 
    { 
     mContext = context; 
    } 
    public int getCount() { 
     return mImageIds.length; 
    } 
    public Object getItem(int position) { 
     return position; 
    } 
    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int index, View view, ViewGroup viewGroup) 
    { 
     // TODO Auto-generated method stub 
     ImageView i = new ImageView(mContext); 

     i.setImageResource(ImageIds[index]); 
     i.setLayoutParams(new Gallery.LayoutParams(200, 200)); 

     i.setScaleType(ImageView.ScaleType.FIT_XY); 

     return i; 
    } 
} 

Если мы идем на сайт Android, developer.android.com, мы находим следующие абстрактные методы.

адаптер> BaseAdapter (подкласс адаптера)

abstract int getCount() 
abstract Object getItem(int position) 
abstract long getItemId(int position) 
abstract int getItemViewType(int position) 
abstract View getView(int position, View convertView, ViewGroup parent) 
abstract int getViewTypeCount() 
abstract boolean hasStableIds() 
abstract boolean isEmpty() 
abstract void registerDataSetObserver(DataSetObserver observer) 
abstract void unregisterDataSetObserver(DataSetObserver observer) 

Мой вопрос мы должны реализовать все вышеперечисленные абстрактные методы? В приведенном выше примере кода мы используем только getCount(), getItem(), getItemId и getView. Зачем?

+0

зависит от вашего требования к приложению. –

+0

Эти четыре метода полностью соответствуют нашим нормальным потребностям, поэтому мы переопределяем только эти 4. –

+0

Что говорит о них andriod doc? Очевидно, зависит от требования –

ответ

2

Аннотация методы вы отправили здесь от Adapter интерфейс. BaseAdapter реализует большинство из них, оставляя вас просто положить те, которые у вас есть (и, конечно, вы можете переопределить реализацию по умолчанию).

0

Я сам задал себе этот вопрос сам этим утром, а затем сделал некоторые расследования.

Если вы посмотрите на код для класса BaseAdapter: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/BaseAdapter.java, вы увидите, что некоторые абстрактные методы в вашем списке уже реализованы через BaseAdapter.

Вам необходимо реализовать методы, которые еще не реализованы в BaseAdapter, такие как getCount() или getItem(). Android только заставляет вас реализовать те методы, которые еще не реализованы, и вы можете переопределить уже реализованные методы.

Смежные вопросы