ABaseApdater

只上代码不多说话

public abstract class ABaseAdapter extends BaseAdapter{

         Context context;

         protected ABaseAdapter(Context context) {
             this.context = context;
         }

         protected ABaseAdapter() {
         }

         /**
         * 各个控件的缓存
         */
         public class ViewHolder{
             public SparseArray<View> views = new SparseArray<View>();

             /**
              * 指定resId和类型即可获取到相应的view
              * @param convertView
              * @param resId
              * @param <T>
              * @return
              */
             public <T extends View> T obtainView(View convertView, int resId){
                View v = views.get(resId);
                 if(null == v){
                     v = convertView.findViewById(resId);
                     views.put(resId, v);
                 }
                 return (T)v;
             }

       }

         /**
          * 改方法需要子类实现,需要返回item布局的resource id
          * @return
          */
         public abstract int itemLayoutRes();

         @Override
         public View getView(int position, View convertView, ViewGroup parent) {
             ViewHolder holder;
             if(null == convertView){
                 holder = new ViewHolder();
                 convertView = LayoutInflater.from(context).inflate(itemLayoutRes(), null);
                 convertView.setTag(holder);
             }else{
                 holder = (ViewHolder) convertView.getTag();
             }
             return getView(position, convertView, parent, holder);
         }

         /**
          * 使用该getView方法替换原来的getView方法,需要子类实现
          * @param position
          * @param convertView
          * @param parent
         * @param holder
          * @return
          */
         public abstract View getView(int position, View convertView, ViewGroup parent, ViewHolder holder);

}

ABaseAdapter的用法:

1:编写适配类直接继承该ABaseAdapter。

2.在构造方法中调用父类的方法:

即:

public MyAdapter(Context context){
        super(context);
    }

3:重写父类方法itemLayoutRes():

@Override
public int itemLayoutRes() {

return R.layout.caipu_griditem;//返回布局的文件
}

4:重写父类额抽象方法getView(),绑定数据:

    @Override
    public View getView(int position, View convertView, ViewGroup parent,
            ViewHolder holder) {

        ImageView imageView = holder.obtainView(convertView, R.id.cp_grid_img);
        TextView textView = holder.obtainView(convertView, R.id.cp_grid_text);
        imageView.setBackgroundResource(IMAGES[position]);
        textView.setText(TITLES[position]);

        return convertView;
    }

结果简洁了许多。好东西,记得要分享!

时间: 2024-09-29 17:30:33

ABaseApdater的相关文章