Android ListView框架搭建:抽取Adapter共性的方法与属性进行封装

1、创建基类BaseHolder,把与ConvertView相关的数据操作全部在这个类里实现

public abstract class BaseHolder<T> {
    protected View contentView;
    protected T data;
    public BaseHolder(){
        contentView=initView();
        contentView.setTag(this);  // 在这个位置设置的标签
    }

    public void setData(T data) {
        this.data=data;
        refreshView(data);
    }
    /**
     * 当Holder中的view对象显示到界面上的时候调用
     * @return
     */
    public View getContentView() {
        return contentView;
    }
    /**
     * 当setData调用的时候 会调用该方法  根据数据 显示界面
     */
    protected abstract void refreshView(T data);

    /**
     * 初始化View对象 及其控件
     * @return
     */
    protected abstract View initView();
}

2、创建DefaultAdapter,所有的Adapter都继承这个类

public abstract class DefaultAdapter<T> extends BaseAdapter {
    private List<T> datas;
    public DefaultAdapter(List<T> datas){
        this.datas=datas;
    }

    @Override
    public int getCount() {
        return datas.size();
    }

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

    @Override
    public long getItemId(int position) {
        return position;
    }
    //convertView 划出屏幕的view对象 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        BaseHolder<T> holder;
        if(convertView==null){
            holder=getHolder();
        }else{
            holder=(BaseHolder<T>)convertView.getTag();
        }
        T string = datas.get(position);
        //holder.refreshView(string);
        holder.setData(string);

        return holder.getContentView();
    }

    protected abstract BaseHolder<T> getHolder();

}

3、使用实例

public class MainActivity extends Activity {
    private ListView lv;
    private List<String> datas;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        datas=new ArrayList<String>();
        for(int i=0;i<100;i++){
            datas.add("aabbbcc"+i);
        }

        lv=(ListView) findViewById(R.id.lv);
        lv.setAdapter(new MainAdapter(datas));

    }
    public void click(View v){
        Intent intent=new Intent(this, SecondActivity.class);
        startActivity(intent);

    }

    private class MainAdapter extends DefaultAdapter<String>{

        public MainAdapter(List<String> datas) {
            super(datas);
            // TODO Auto-generated constructor stub
        }

        @Override
        protected BaseHolder<String> getHolder() {
            return new MainHolder();
        }



    }
    class MainHolder extends BaseHolder<String>{
        private TextView tv;
        //  当执行new MainHolder() 会调用该方法
        @Override
        protected void refreshView(String data) {
            this.tv.setText(data);
        }
        @Override
        protected View initView() {
            View view=View.inflate(getApplicationContext(), R.layout.item_main, null);
            this.tv=(TextView) view.findViewById(R.id.tv);
            return view;
        }
    }
}

—————————————————–
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
请先拍 购买地址, 下载请用百度盘
目录如下:
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)

01高级架构师四十二个阶段高内容:
这里写图片描述
这里写图片描述
—————————————————–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值