您的位置:首页 > 移动开发 > Android开发

android 一个公共的适配器,简化适配器代码

2015-08-18 15:22 411 查看
在adapter的基础上封装一层,继承BaseAdapter,省去了adapter立面很多代码,用起来很方便

import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/***
* adapter父类
*/
public abstract class BaseAutoAdapter extends BaseAdapter{
//引入view的id
private int itemLayoutId;
//适配器立面需要绑定数据的控件id
private int[] childViewIds;
//引入view
private LayoutInflater inflater;
public AutoBaseAdapter(Context context, int itemLayoutId,
int... childViewIds) {
inflater = LayoutInflater.from(context);
this.itemLayoutId= itemLayoutId;
this.childViewIds = childViewIds;
}
@Override
public View getView(int position, View convertView,    ViewGroup parent) {
View view = null;
ViewHolder holder = null;
if (convertView != null) {
view = convertView;
holder = (ViewHolder) view.getTag();
} else {
view = inflater.inflate(itemLayoutID, null);
holder = new ViewHolder();
for (int childId : childViewIds) {
holder.cacheView(view.findViewById(childId));
}
view.setTag(holder);
}
boundDataAndEventToViews(position, view, holder.getCacheViews());
return view;
}
/**
* 抽象方法, 被子类覆盖, 将业务相关的数据和事件绑定到特定的子View上
*/
protected abstract void boundViews(int position,
View itemView, ArrayList<View> childViews);

private static class ViewHolder {
private ArrayList<View> cachedViews = new ArrayList<View>();

public void cacheView(View view) {
cachedViews.add(view);
}
public ArrayList<View> getCacheViews() {
return cachedViews;
}
}
}


下面来看看怎么去继承这个adapter用吧

import java.util.ArrayList;
import java.util.List;
import com.cn.activity.R;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
/**
*一个普通的适配器继承上面的那个封装适配器
*/
public class TextAdapter extends BaseAutoAdapter{
public TextAdapter (Context mContext) {
//传入itemid和控件id即可
super(mContext, R.layout.item,
R.id.textView,R.id.button);
}

@Override
public int getCount() {
return 0;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
protected void boundViews(int position, View itemView,
ArrayList<View> childViews) {
//这里注意,不需要再声明控件了,直接从childViews里面取,根        据传入的控件顺序依次去取,一定要对应好传入的控件类型和取出来强转的类型
((TextView)childViews.get(0)).setText("第一个控件");
((Button)childViews.get(1)).setText("第二个控件");
}


不需要再每个适配器的getView()方法里面写很多的代码啦,赶紧试试吧,欢迎指点批评
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 适配器