1

以下代码是为 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。为什么?

4

2 回答 2

2

您在此处发布的抽象方法来自Adapter接口。BaseAdapter实现其中的大多数,让您只放置您拥有的那些(当然您可以覆盖默认实现)。

于 2013-11-08T12:57:46.613 回答
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 只强制您实现那些尚未实现的方法,当然您可以覆盖已经实现的方法。

于 2014-08-10T08:37:45.827 回答