android中adapter公共方法,所有adapter可以继承该方法

今天忽然想到adapter也是可以写公共方法的,就上网找了一下,发现真的会省很多力气,真为自己以前自己写那么多代码感到着急啊,感叹自己的技术还差很远啊。

直接上代码:

1、先写一个ViewHoldr,这个是必须的,是获取页面数据的方法和给页面赋值的方法

package com.huanyunsoft.portal.base;

import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class ViewHolder {


   private SparseArray<View> mViews;
   private int mPosition;
   private View mConvertView;
   public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
      this.mPosition = position;
      this.mViews = new SparseArray<View>();
      mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,false);
      mConvertView.setTag(this);
   }
   public static ViewHolder get(Context context,View convertView,ViewGroup parent,int layoutId,int position){
      if(convertView == null)
      {
         return new ViewHolder(context,parent,layoutId,position);
      }else
      {
         ViewHolder holder = (ViewHolder) convertView.getTag();
         holder.mPosition = position;
         return holder;
      }
   }
   
   public View getConvertView()
   {
      return mConvertView;
   }
   /*
   *
   * */
   public <T extends View>T getView(int viewId)
   {
      View view = mViews.get(viewId);
      
      if(view ==null)
      {
         view = mConvertView.findViewById(viewId);
         mViews.put(viewId, view);
      }
      return (T)view;
      
   }
   /*
   * 基础方法设置字体
   * */
   public ViewHolder setText(int viewId,String text)
   {
      TextView tv = getView(viewId);
      tv.setText(text);
      return this;
   }
   
   public ViewHolder setImageResource(int viewId,int resId)
   {
      ImageView view = getView(viewId);
      view.setImageResource(resId);
      return this;
   }

}

2、下面就是真正的公共方法

package com.huanyunsoft.portal.base;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public abstract class CommonAdapter<T> extends BaseAdapter {
   protected Context mContext;
   protected List<T> mDatas;
   protected LayoutInflater mInflater;
   private int layoutId;
   public CommonAdapter(Context context,List<T> datas,int layoutId)
   {
      this.mContext = context;
      this.mDatas = datas;
      this.layoutId = layoutId;
      mInflater = LayoutInflater.from(context);
   }
   @Override
   public int getCount() {
      // TODO Auto-generated method stub
      return mDatas.size();
   }

   @Override
   public T getItem(int position) {
      // TODO Auto-generated method stub
      return mDatas.get(position);
   }

   @Override
   public long getItemId(int position) {
      // TODO Auto-generated method stub
      return position;
   }

   @Override
   public  View getView(int position, View convertView, ViewGroup parent)
   {
      ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position);

      convert(holder,getItem(position));

      return holder.getConvertView();
   }

   public abstract void convert(ViewHolder holder,T t);

}
3、当业务中Activity需要使用listview时,调用方法如下

adapter=new CustomInfoListAdapter(CustomInfoActivity.this,cusBeanList,R.layout.custom_info_list_adapter);
custom_info_list.setAdapter(adapter);
4、自己写的adapter,需要继承上面写的公共方法

public class CustomInfoListAdapter extends CommonAdapter<CustomBuildBean> {

    public CustomInfoListAdapter(Context context, List<CustomBuildBean> datas, int layoutId) {
        super(context, datas, layoutId);
    }

    @Override
    public void convert(ViewHolder holder, CustomBuildBean stringStringMap) {
        holder.setText(R.id.building_name,stringStringMap.getBuildName());
        holder.setText(R.id.source_area,stringStringMap.getHouseArea());

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值