码迷,mamicode.com
首页 > 其他好文 > 详细

ABaseApdater

时间:2015-07-29 00:55:16      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

只上代码不多说话

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;
    }

 

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

 

ABaseApdater

标签:

原文地址:http://www.cnblogs.com/wei1228565493/p/4684782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!