【问题标题】:Do we need to implement all the abstract methods in Android?我们需要在Android中实现所有的抽象方法吗?
【发布时间】:2013-11-08 12:52:59
【问题描述】:

以下代码是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(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) 

我的问题是我们需要实现上述所有抽象方法吗? 在我上面的示例代码中,我们只使用 getCount()、getItem()、getItemId 和 getView。为什么?

【问题讨论】:

  • 取决于您的应用要求。
  • 这四个方法满足了我们的正常需求,所以我们只覆盖这四个。
  • andriod doc 对他们说了什么?显然取决于需求
  • 所以我们不需要实现上述所有抽象方法!我虽然我们需要这样做。

标签: android abstract-class baseadapter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    今天早上我自己也问了自己同样的问题,然后我做了一些调查。

    如果您查看 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 只会强制你实现那些尚未实现的方法,当然你可以覆盖已经实现的方法。

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 2020-04-13
      • 2020-04-03
      • 2014-03-18
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      相关资源
      最近更新 更多