我们需要在Android中实现所有抽象方法吗?

时间:2013-11-08 12:53:00

标签: android abstract-class baseadapter

以下代码是GalleryView / GridView等的典型适配器扩展BaseAdapter:

 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,我们会找到以下抽象方法。

Adapter> 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。为什么呢?

2 个答案:

答案 0 :(得分:2)

您在此处发布的抽象方法来自Adapter界面。 BaseAdapter实现了大部分内容,让您只放置您拥有的(当然,您可以覆盖默认实现)。

答案 1 :(得分: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只会强制您实现那些尚未实现的方法,并且您可以覆盖已经实现的方法。