ListView万能适配器CommonAdapter

来源:互联网 发布:淘宝回复差评专业术语 编辑:程序博客网 时间:2024/05/16 11:57

CommonAdapter:

/* *  @Copyright (c) tianchenglin *  @Author TCL *  @Date 2016.7.5 */package com.study.tcl.commonadapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import java.util.List;/** * Created by TCL on 2016/7/5. */public abstract class CommonAdapter<T> extends BaseAdapter {    private Context mContext;    private List<T> mData;    private int mItemLayoutId;//每一行item布局文件    public CommonAdapter(Context context, List<T> data, int itemLayoutId) {        this.mContext = context;        this.mData = data;        this.mItemLayoutId = itemLayoutId;    }    @Override    public int getCount() {        return mData.size();    }    @Override    public T getItem(int position) {        return mData.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder = ViewHolder.getInstance(mContext, convertView, parent, mItemLayoutId, position);        //填充数据        convert(viewHolder, getItem(position));        return viewHolder.getConvertView();    }    public abstract void convert(ViewHolder viewHolder, T item);}
ViewHolder:

/* *  @Copyright (c) tianchenglin *  @Author TCL *  @Date 2016.7.5 */package com.study.tcl.commonadapter;import android.content.Context;import android.graphics.Bitmap;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;/** * Created by TCL on 2016/7/5. */public class ViewHolder {    private SparseArray<View> mViews;//稀疏数组,里面放的是一行里面所有的控件    private int mPosition;    private View mConvertView;//每一行对应的布局    //采用单例模式    private ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {        this.mPosition = position;        this.mViews = new SparseArray<View>();        /**此处用LayoutInflater,直接使用View.inflate报错**/        this.mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);        this.mConvertView.setTag(this);    }    /**     * 获取ViewHolder对象     *     * @return     */    public static ViewHolder getInstance(Context context, View convertView, ViewGroup parent, int layoutId, int            position) {        if (convertView == null) {            synchronized (ViewHolder.class) {                return new ViewHolder(context, parent, layoutId, position);            }        } else {            return (ViewHolder) convertView.getTag();        }    }    /**     * 通过控件的id得到相应的控件(因为不知道控件的类型,要用到泛型)     */    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;    }    /**     * 为TextView赋值     */    public ViewHolder setText(int viewId, String text) {        TextView view = getView(viewId);//找到控件        view.setText(text);        return this;    }    /**     * 为ImageView设置图片     */    public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {        ImageView view = getView(viewId);        view.setImageBitmap(bitmap);        return this;    }    /**     * 返回行号     *     * @return     */    public int getPosition() {        return mPosition;    }    /**     * 返回行view     *     * @return     */    public View getConvertView() {        return mConvertView;    }}
MainActivity:

/* *  @Copyright (c) tianchenglin *  @Author TCL *  @Date 2016.7.5 */package com.study.tcl.commonadapter;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ListView;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView lv_list;    //准备数据    private List<String> mData = new ArrayList<String>(Arrays.asList("宋江", "卢俊义", "吴用",            "公孙胜", "关胜", "林冲", "秦明", "呼延灼", "花荣", "柴进", "李应", "朱仝", "鲁智深",            "武松", "董平", "张清", "杨志", "徐宁", "索超", "戴宗", "刘唐", "李逵", "史进", "穆弘",            "雷横", "李俊", "阮小二", "张横", "阮小五", " 张顺", "阮小七", "杨雄", "石秀", "解珍",            " 解宝", "燕青", "朱武", "黄信", "孙立", "宣赞", "郝思文", "韩滔", "彭玘", "单廷珪",            "魏定国", "萧让", "裴宣", "欧鹏", "邓飞", " 燕顺", "杨林", "凌振", "蒋敬", "吕方",            "郭 盛", "安道全", "皇甫端", "王英", "扈三娘", "鲍旭", "樊瑞", "孔明", "孔亮", "项充",            "李衮", "金大坚", "马麟", "童威", "童猛", "孟康", "侯健", "陈达", "杨春", "郑天寿",            "陶宗旺", "宋清", "乐和", "龚旺", "丁得孙", "穆春", "曹正", "宋万", "杜迁", "薛永", "施恩"));    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        this.lv_list = (ListView) findViewById(R.id.lvList);        //设置适配器        lv_list.setAdapter(new CommonAdapter<String>(getApplicationContext(), mData, R.layout.item) {            @Override            public void convert(ViewHolder viewHolder, String item) {                viewHolder.setText(R.id.tvName, item);            }        });    }}

activity_main:

<?xml version="1.0" encoding="utf-8"?><!--  ~  @Copyright (c) tianchenglin  ~  @Author TCL  ~  @Date 2016.7.5  --><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.study.tcl.commonadapter.MainActivity">    <ListView        android:id="@+id/lvList"        android:layout_width="match_parent"        android:layout_height="match_parent"></ListView></RelativeLayout>
item:

<?xml version="1.0" encoding="utf-8"?><!--  ~  @Copyright (c) tianchenglin  ~  @Author TCL  ~  @Date 2016.7.5  --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="match_parent"              android:layout_height="wrap_content"              android:orientation="vertical">    <TextView        android:id="@+id/tvName"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#000000"        android:textSize="18sp"/></LinearLayout>





0 0
原创粉丝点击