万能适配器2 通用Adapter编写

上一篇介绍到MyAdapterVieHolder extends BaseAdapter这里,我还是每次写这个Adapter有点烦,我可不可以自定义一个BaseAdapter来减少代码量跟提高效率呢,想到了咱就来写一写吧,
自定义一个Adapter为 CommonAdapter.java

package com.utils;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/**
 * BaseAdapter 雏形
 * @author Administrator
 *
 * @param <T>
 */
public abstract class CommonAdapter<T> extends BaseAdapter {

    protected Context mContext;
    protected List<T> mDatas; 
    protected LayoutInflater mInflater; //布局
    public CommonAdapter(Context context,List<T>datas){
        this.mContext = context ;
        this.mInflater = LayoutInflater.from(context);
        this.mDatas = datas;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mDatas.size();
    }

    @Override
    public Object 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 abstract View getView(int position, View convertView, ViewGroup parent);
}

而这样编写后的BaseAdapter当然要应用于MyAdapterViewHolder里啦,这里面的代码就简化为啦这样

package com;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import com.utils.CommonAdapter;
import com.utils.ViewHolder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapterViewHolder extends CommonAdapter<Bean> {



    public MyAdapterViewHolder(Context context,List<Bean>datas){
        super(context, datas);
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //初始化ViewHolder
        ViewHolder  holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position);

        Bean bean = mDatas.get(position);

        TextView title = holder.getView(R.id.id_title);
        title.setText(bean.getTitle());
        TextView desc = holder.getView(R.id.id_desc);
        desc.setText(bean.getDesc());
        ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
        ((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());


        //注意convertView是在Holder初始化的       !!!!!!这是很重要
        return holder.getmConvertView() ;
    }
}

我日,现在一看有点小清新啊,爽多了有木有,然后我感觉在MyAdapterViewHolder中的getView中ViewHolder的创建几乎每次都是不变的,那我们可不可以再简化一下

简化后的代码
CommonAdapter.java

package com.utils;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * BaseAdapter 雏形
 * @author Administrator
 *
 * @param <T>
 */
public abstract class CommonAdapter<T> extends BaseAdapter {

    protected Context mContext;
    protected List<T> mDatas; 
    protected LayoutInflater mInflater; //布局
    public CommonAdapter(Context context,List<T>datas){
        this.mContext = context ;
        this.mInflater = LayoutInflater.from(context);
        this.mDatas = datas;
    }

    @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
                ViewHolder  holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position);

                convert(holder, getItem(position));

                //注意convertView是在Holder初始化的       !!!!!!这是很重要
                return holder.getmConvertView() ;
    }

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

}

而我们的MyAdapterViewHolder.java呢

package com;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import com.utils.CommonAdapter;
import com.utils.ViewHolder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapterViewHolder extends CommonAdapter<Bean> {
    public MyAdapterViewHolder(Context context,List<Bean>datas){
        super(context, datas);
    }

    @Override
    public void convert(ViewHolder holder, Bean bean) {     ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
        ((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());
        ((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
        ((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc());
    }

}

一看,我日,这才几行代码啊,就是SetText啊,这么简单的话,我直接就不用重写一个类啊,直接在用Adapter的时候new出来就行啦,而且以后如果再用adapter的话,我也可以直接拿过来用,因为我的代码已封装好啦啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值