Search code examples
androidabstract-classbaseadapter

Do we need to implement all the abstract methods in Android?


The following code is the typical adapter extends BaseAdapter for GalleryView/GridView etc.:

 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;
     }
 }

If we go to Android website, developer.android.com, we find the following abstract methods.

Adapter>BaseAdapter(subclass of Adapter)

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) 

My question is do we need to implement all the above abstract methods? In my example code above, we use getCount(), getItem(), getItemId and getView only. Why?


Solution

  • Abstract methods you posted here are from Adapter interface. BaseAdapter implements most of them, leaving you to just put the ones you have (and of course you can override default implementation).