自己封装的适配器(适用于ListView和GridView)

来源:互联网 发布:淘宝怎么找代理商 编辑:程序博客网 时间:2024/06/02 19:43
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.List;

/**
 * Created by Yangzb on 2016/8/1.
 * 所有adapter 基类
 抽象类不能被实例化
 */
public abstract class CommonAdapter<Textends BaseAdapter {
    protected Context mContext;
    protected List<TmDatas;
    protected LayoutInflater mInflater;
    private int layoutId;
    public CommonAdapter(Context context,List<T> lists,int layoutId){
        this.mContext = context;
        mInflater = LayoutInflater.from(context);
        this.layoutId = layoutId;
        this.mDatas = lists;
    }
    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public getItem(int position) {
        return mDatas.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        ViewHolder viewHolder = ViewHolder.getViewHolder(mContext,convertView,parent,layoutId,position);
        conVert(viewHolder,getItem(position));
        return viewHolder.getConvertView();
    }
    public abstract void conVert(ViewHolder viewHolder,t);
}

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

/**
 * Created by Yangzb on 2016/8/1.
 * 通用veiwholder
 */
public class ViewHolder {
    private SparseArray<View> mViews;//存储itme控件
    private int mPosition;
    private View mConvertView;

    public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
        this.mPosition = position;
        this.mViews new SparseArray<>();
        mConvertView = LayoutInflater.from(context).inflate(layoutId,parent,false);
        mConvertView.setTag(this);//this 就是当前的viewholder

    }

    /**
     * 获取viewholder
     * @param context
     @param convertView
     @param parent
     @param layoutId
     @param position
     @return
     */
    public static ViewHolder getViewHolder(Context context, View convertView, ViewGroup parent,
                                           int layoutId, int position) {
        if(convertView == null){
            return new ViewHolder(context,parent,layoutId,position);
        }else {
            ViewHolder viewHolder = (ViewHolder) convertView.getTag();
            viewHolder.mPosition = position;//convertView 复用 但position需要更新
            return viewHolder;
        }
    }

    /**
     * 获取converView
     * @return
     */
    public View getConvertView(){
        return mConvertView;
    }

    /**
     * 通过viewId获取控件
     @param viewId
     @param <T>
     @return
     */
    public <extends View> getView(int viewId){
        View view = mViews.get(viewId);
        if(view == null){//判断当前view有没有存过
            view = mConvertView.findViewById(viewId);
            mViews.put(viewId,view);
        }
        return (T) view;
    }

    public int getmPosition() {
        return mPosition;
    }

    /**
     * textview设置值
     @param viewId
     @param text
     @return
     */
    public ViewHolder setTvText(int viewId,String text){
        TextView textView = getView(viewId);
        textView.setText(text);
        return this;
    }

    /**
     * imgview设置图片
     @param viewId
     @param imgResId
     @return
     */
    public ViewHolder setImgRes(int viewId,int imgResId){
        ImageView imageView = getView(viewId);
        imageView.setImageResource(imgResId);
        return this;
    }
    public ViewHolder setImgBtRes(int viewId,int imgResId){
        ImageButton imageButton = getView(viewId);
        imageButton.setImageResource(imgResId);
        return this;
    }
}

//用法
/**
 * 基于基类的适配器
 */
class MyAdapter extends CommonAdapter<Contact>{
    public MyAdapter(Context context, List<Contact> lists) {
        super(context, lists,R.layout.contact_listview_item);
    }

    @Override
    public void conVert(ViewHolder viewHolder, final Contact contact) {
        viewHolder.setTvText(R.id.id_tv_conname,contact.getContactName());
        viewHolder.setTvText(R.id.id_tv_connumber,contact.getContactNumber());
        TextView id_tv_sort = viewHolder.getView(R.id.id_tv_sort);
        final CheckBox id_ck_select =  viewHolder.getView(R.id.id_ck_select);
        id_ck_select.setChecked(contact.isSelectTag());
        int position = viewHolder.getmPosition();
        if(position == 0){
            id_tv_sort.setVisibility(View.VISIBLE);
            id_tv_sort.setText(contact.getSortLetters());
        }else{
            String lastCatalog = mDatas.get(position - 1).getSortLetters();
            if(lastCatalog.equals(contact.getSortLetters())){//同一分组
                id_tv_sort.setVisibility(View.GONE);
            }else {
                id_tv_sort.setVisibility(View.VISIBLE);
                id_tv_sort.setText(contact.getSortLetters());
            }
        }
        id_ck_select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                contact.setSelectTag(id_ck_select.isChecked());
            }
        });
    }
}
0 0
原创粉丝点击