ListView的适配器和Holder的封装

1未封装标准写法

MyAdapter.java

class MyAdapter extends BaseAdapter {

        private ArrayList data;

        public MyAdapter(List data){
            this.data = data;
        }
        @Override  
        public int getCount() {  
            return data.size();  
        }  
        @Override  
        public Object getItem(int position) {  
            return data.get(position);  
        }  
        @Override  
        public long getItemId(int position) {  
            return position;  
        }  
        @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
            ViewHolder holder;  
            if(convertView == null){  
                holder = new ViewHolder();  
                // 1.加载布局文件  
                View view = View.inflate(context, R.layout.listviewitem, null);  
                // 2.初始化控件  
                holder.textView = view.findViewById(R.id.textView1);  
                // 3.打一个tag标记  
                view.setTag(holder);  
            }else{  
                holder = (ViewHolder) convertView.getTag();  
            }  
                // 4.设置数据刷新内容  
            holder.textView.setText("设置内容");  
            return convertView;  
        }  
    }  

    static class ViewHolder {  
        TextView textView;  
    }  

2封装BaseHolder

MyBaseHolder.java

public abstract class MyBaseHolder<T> {  
    // 一个item的根布局  
    private View mRootView;  
    // 一个item的数据  
    private T data;  

    // 当new这个对象时, 就会加载布局, 初始化控件,设置tag  
    public MyBaseHolder() {  
        mRootView = initView();  
        // 3. 打一个标记tag  
        mRootView.setTag(this);  
    }  
    // 1. 加载布局文件  
    // 2. 初始化控件 findViewById  
    public abstract View initView();  
    // 返回item的布局对象  
    public View getRootView() {  
        return mRootView;  
    }  
    // 设置当前item的数据  
    public void setData(T data) {  
        this.data = data;  
        refreshView(data);  
    }  
    // 获取当前item的数据  
    public T getData() {  
        return data;  
    }  
    // 4. 根据数据来刷新界面  
    public abstract void refreshView(T data);  
}  

3实体Holder

SpecificHolder.java

public class SpecificHolder extends MyBaseHolder<String> {  

    private TextView mTextView;  

    @Override  
    public View initView() {  
        // 1. 加载布局  
        View view = View.inflate(null, R.layout.item_listview, null);  
        // 2. 初始化控件  
        mTextView = (TextView) view.findViewById(R.id.textView1);  
        return view;  
    }  

    @Override  
    public void refreshView(String data) {  
        // 3. 设置内容刷新界面  
        mTextView.setText(data);  
    }  

}  

4封装BaseAdapter

MyBaseAdapter.java

public abstract class MyBaseAdapter<T> extends BaseAdapter {

    private ArrayList<T> data;

    public MyBaseAdapter(ArrayList<T> data) {
        this.data = data;
    }
    @Override
    public int getCount() {
        return data.size();
    }
    @Override
    public T getItem(int position) {
        return data.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        MyBaseHolder<T> baseHolder;
        if(convertView == null){
            // 1. 加载布局文件
            // 2. 初始化控件 findViewById
            // 3. 打一个标记tag
            baseHolder = getHolder();
        }else{
            baseHolder = (MyBaseHolder<T>) convertView.getTag();
        }
        // 4. 设置内容刷新界面
        baseHolder.setData(getItem(position));
        return baseHolder.getRootView();
    }

    public abstract MyBaseHolder<T> getHolder();
}

5实体Adapter

MyAdapter.java

class MyAdapter extends MyBaseAdapter<String>{  

        public MyAdapter(ArrayList<String> data) {  
            super(data);  
        }  

        @Override  
        public MyBaseHolder<String> getHolder() {  
            return new SpecificHolder();  
        }  

    }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值