Adapter优化(三)万能适配器

一、概述
实现万能适配器,基于通用ViewHolder。
链接:http://blog.csdn.net/qq_27993003/article/details/51447283

二、设想
Adapter要通用,首先要抽象的是:数据(抽象成List),getCount()、getItemId()、getItem()可以直接在抽象类实现,然后是重要的getView()方法…

分析getView()方法:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = ViewHolder.getViewHolder(context, parent, R.layout.item_1,
                position, convertView);
        viewHolder.setText(R.id.itemTitle, datas.get(position).getTitle())
                .setText(R.id.itemContent, datas.get(position).getContent());
        return viewHolder.getConvertView();
    }

第一行:特殊的在R.layout.item_1,设计:把这个layoutId通过构造器传进来
第二行:两个参数都是特性的,用抽象方法convert()封装
第三行:直接抽象类实现

新的getView()方法设计:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = ViewHolder.getViewHolder(context, parent, mItemLayoutId,
                position, convertView);
        convertViewHolder(viewHolder, getItem(position));
        return viewHolder.getConvertView();
    }


    public abstract void convertViewHolder(ViewHolder viewHolder, T item);

三、代码实现

通用接口:

package com.example.barbara.commonadapterexample;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.List;

/**
 * 万能Adapter
 * @param <T>
 */
public abstract class CommonAdapter<T> extends BaseAdapter {
    private Context context;
    private List mDatas;
    private LayoutInflater mLayoutInflater;
    private int mItemLayoutId;

    public CommonAdapter(Context mcontext, List<T> mDatas, int mItemLayoutId) {
        mLayoutInflater = LayoutInflater.from(mcontext);
        this.context = mcontext;
        this.mDatas = mDatas;
        this.mItemLayoutId = mItemLayoutId;
    }

    @Override
    public int getCount() {
        return (mDatas==null)?-1:mDatas.size();
    }

    @Override
    public T getItem(int position) {
        return (mDatas==null)?null:(T) 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(context, parent, mItemLayoutId,
                position, convertView);
        convertViewHolder(viewHolder, getItem(position));
        return viewHolder.getConvertView();
    }


    public abstract void convertViewHolder(ViewHolder viewHolder, T item);
}

MainActivity调用:

//直接匿名内部类,重写一个方法就OK!
        listView.setAdapter(new CommonAdapter<ItemBean>(this, list, R.layout.item_1){
            @Override
            public void convertViewHolder(ViewHolder viewHolder, ItemBean item) {
                viewHolder.setText(R.id.itemTitle, item.getTitle())
                        .setText(R.id.itemContent, item.getContent());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值