您的位置:首页 > 其它

万能适配器2 通用Adapter编写

2015-10-02 11:34 330 查看
上一篇介绍到MyAdapterVieHolder extends BaseAdapter这里,我还是每次写这个Adapter有点烦,我可不可以自定义一个BaseAdapter来减少代码量跟提高效率呢,想到了咱就来写一写吧,

自定义一个Adapter为 CommonAdapter.java

package com.utils;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/**
* BaseAdapter 雏形
* @author Administrator
*
* @param <T>
*/
public abstract class CommonAdapter<T> extends BaseAdapter {

protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater mInflater; //布局
public CommonAdapter(Context context,List<T>datas){
this.mContext = context ;
this.mInflater = LayoutInflater.from(context);
this.mDatas = datas;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return mDatas.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mDatas.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public abstract View getView(int position, View convertView, ViewGroup parent);
}


而这样编写后的BaseAdapter当然要应用于MyAdapterViewHolder里啦,这里面的代码就简化为啦这样

package com;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import com.utils.CommonAdapter;
import com.utils.ViewHolder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapterViewHolder extends CommonAdapter<Bean> {

public MyAdapterViewHolder(Context context,List<Bean>datas){
super(context, datas);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
//初始化ViewHolder
ViewHolder  holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position);

Bean bean = mDatas.get(position);

TextView title = holder.getView(R.id.id_title);
title.setText(bean.getTitle());
TextView desc = holder.getView(R.id.id_desc);
desc.setText(bean.getDesc());
((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());

//注意convertView是在Holder初始化的       !!!!!!这是很重要
return holder.getmConvertView() ;
}
}


我日,现在一看有点小清新啊,爽多了有木有,然后我感觉在MyAdapterViewHolder中的getView中ViewHolder的创建几乎每次都是不变的,那我们可不可以再简化一下

简化后的代码

CommonAdapter.java

package com.utils;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
* BaseAdapter 雏形
* @author Administrator
*
* @param <T>
*/
public abstract class CommonAdapter<T> extends BaseAdapter {

protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater mInflater; //布局
public CommonAdapter(Context context,List<T>datas){
this.mContext = context ;
this.mInflater = LayoutInflater.from(context);
this.mDatas = datas;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return mDatas.size();
}

@Override
public T getItem(int position) {
// TODO Auto-generated method stub
return mDatas.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public  View getView(int position, View convertView, ViewGroup parent){
//初始化ViewHolder
ViewHolder  holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position);

convert(holder, getItem(position));

//注意convertView是在Holder初始化的       !!!!!!这是很重要
return holder.getmConvertView() ;
}

public abstract void convert(ViewHolder holder,T t);

}


而我们的MyAdapterViewHolder.java呢

package com;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import com.utils.CommonAdapter;
import com.utils.ViewHolder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapterViewHolder extends CommonAdapter<Bean> {
public MyAdapterViewHolder(Context context,List<Bean>datas){
super(context, datas);
}

@Override
public void convert(ViewHolder holder, Bean bean) {     ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());
((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc());
}

}


一看,我日,这才几行代码啊,就是SetText啊,这么简单的话,我直接就不用重写一个类啊,直接在用Adapter的时候new出来就行啦,而且以后如果再用adapter的话,我也可以直接拿过来用,因为我的代码已封装好啦啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: