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 の Web サイト 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 を通じて既に実装されていることを確認してください。

したがって、getCount() や getItem() など、BaseAdapter 内にまだ実装されていないメソッドのみを実装する必要があります。Android では、まだ実装されていないメソッドの実装のみが強制されます。もちろん、既に実装されているメソッドをオーバーライドできます。

于 2014-08-10T08:37:45.827 に答える