android 一个公共的适配器,简化适配器代码

在adapter的基础上封装一层,继承BaseAdapter,省去了adapter立面很多代码,用起来很方便

import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/***
 * adapter父类
 */
public abstract class BaseAutoAdapter extends BaseAdapter{
    //引入view的id
    private int itemLayoutId;
    //适配器立面需要绑定数据的控件id
    private int[] childViewIds;
    //引入view
    private LayoutInflater inflater;
    public AutoBaseAdapter(Context context, int itemLayoutId,
            int... childViewIds) {
        inflater = LayoutInflater.from(context);
        this.itemLayoutId= itemLayoutId;
        this.childViewIds = childViewIds;
    }
    @Override
    public View getView(int position, View convertView,    ViewGroup parent) {
        View view = null;
        ViewHolder holder = null;
        if (convertView != null) {
            view = convertView;
            holder = (ViewHolder) view.getTag();
        } else {
            view = inflater.inflate(itemLayoutID, null);
            holder = new ViewHolder();
            for (int childId : childViewIds) {
                holder.cacheView(view.findViewById(childId));
            }
            view.setTag(holder);
        }
        boundDataAndEventToViews(position, view, holder.getCacheViews());
        return view;
    }
    /**
     * 抽象方法, 被子类覆盖, 将业务相关的数据和事件绑定到特定的子View上
     */
    protected abstract void boundViews(int position,
            View itemView, ArrayList<View> childViews);

    private static class ViewHolder {
        private ArrayList<View> cachedViews = new ArrayList<View>();

        public void cacheView(View view) {
            cachedViews.add(view);
        }
        public ArrayList<View> getCacheViews() {
            return cachedViews;
        }
    }
}

下面来看看怎么去继承这个adapter用吧

import java.util.ArrayList;
import java.util.List;
import com.cn.activity.R;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
/** 
 *一个普通的适配器继承上面的那个封装适配器
 */
public class TextAdapter extends BaseAutoAdapter{
    public TextAdapter (Context mContext) {
        //传入itemid和控件id即可
        super(mContext, R.layout.item, 
        R.id.textView,R.id.button);
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    protected void boundViews(int position, View itemView,
            ArrayList<View> childViews) {
        //这里注意,不需要再声明控件了,直接从childViews里面取,根        据传入的控件顺序依次去取,一定要对应好传入的控件类型和取出来强转的类型
        ((TextView)childViews.get(0)).setText("第一个控件");
        ((Button)childViews.get(1)).setText("第二个控件");
    }

不需要再每个适配器的getView()方法里面写很多的代码啦,赶紧试试吧,欢迎指点批评

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值