可以使用构造方法:
private List<ItemBean> baseListItems; private LayoutInflater mInflate; //布局装载器 public MyBaseAdapter(Context context,List<ItemBean> listItems){ baseListItems = listItems; //将数据源与数据适配器关联 mInflate = LayoutInflater.from(context); //初始化布局装载器 }
BaseAdapter获取View分三种:逗比式,普通式,文艺式。
逗比式:需要多次新建View,没有充分利用列表组件(ListView,GridView)的缓冲机制,有浪费很大资源的嫌疑。
@Override public View getView(int i, View convertView, ViewGroup viewGroup) {
View view = mInflate.inflate(R.layout.simple_item, null); //重复新建View.其中mInflate 为布局装载器,可从要使用的当前的Adapter的界面对象获得. ImageView imageView = (ImageView) view.findViewById(R.id.header); TextView personName = (TextView) view.findViewById(R.id.personName); TextView desc = (TextView) view.findViewById(R.id.desc); //创建列表项对应的Bean对象 BaseItemBean itemBean = baseListItems.get(i); //给个组件赋值 imageView.setImageResource(itemBean.Header); personName.setText(itemBean.PersonName); desc.setText(itemBean.Desc); return view;
}
普通式:利用了ListView的缓存机制。
@Override public View getView(int i, View convertView, ViewGroup viewGroup) {
if (convertView == null) { //判断缓存池中是否有当前列表项布局对应的view,当为null时,使用布局装载器转换,否则直接使用
convertView = mInflate.inflate(R.layout.simple_item, null); //避免了重复的创建大量的convertView. } ImageView imageView = (ImageView) convertView.findViewById(R.id.header); TextView personName = (TextView) convertView.findViewById(R.id.personName); TextView desc = (TextView) convertView.findViewById(R.id.desc); //创建列表项对应的Bean对象 BaseItemBean itemBean = baseListItems.get(i); //给个组件赋值 imageView.setImageResource(itemBean.Header); personName.setText(itemBean.PersonName); desc.setText(itemBean.Desc); return convertView;
}
文艺式:在普通式中,虽然利用了listView的缓存机制,避免了convertView的重复创建,但仍然存在多个findViewByID() 操作,浪费了大量的资源,为了避免此情况,使用内部类ViewHolder。。。
@Override public View getView(int i, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder; if (convertView == null) { convertView = mInflate.inflate(R.layout.simple_item, null); viewHolder = new ViewHolder(); //初始化ViewHolder //在创建完convertView后将列表项中的各组件保存到ViewHolder中 viewHolder.Header = (ImageView) convertView.findViewById(R.id.header); viewHolder.PersonName = (TextView) convertView.findViewById(R.id.personName); viewHolder.Desc = (TextView) convertView.findViewById(R.id.desc); //通过setTag将ViewHolder与convertView绑定 convertView.setTag(viewHolder); }else { //当convertVIew不为空时,通过getTag获取ViewHolder对象 viewHolder = (ViewHolder) convertView.getTag(); } //给convertView个组件赋值 BaseItemBean itemBean = baseListItems.get(i); viewHolder.Header.setImageResource(R.mipmap.ic_launcher); viewHolder.PersonName.setText(itemBean.PersonName); viewHolder.Desc.setText(itemBean.Desc); return convertView; } //创建内部类ViewHolder,需要类中的各变量与列表项的各单元组件相对应 public class ViewHolder{ public ImageView Header; public TextView PersonName; public TextView Desc; }
总结:在开发过程中,应尽量使用文艺式,这样有利于充分利用资源,同事优化了开发效率。
下载说明
☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,
☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!
☉唯一站长QQ:1004003180 [人格担保-本站注重诚信!]
☉购买建议E-mail:1004003180@qq.com 源码收购 E-mail:1004003180@qq.com
☉本站文件解压密码 【文章内都自带解压密码,每个密码不同!】