• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > BaseAdapter获取View之三重境界,baseadapterview

BaseAdapter获取View之三重境界,baseadapterview

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了baseadapter,baseadapter详解,baseadapter的用法,android baseadapter,listview baseadapter等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

BaseAdapter获取View之三重境界,baseadapterview


在BaseAdapter获取View之前,BaseAdapter需要与数据源相关联。

可以使用构造方法:

   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空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • BaseAdapter获取View之三重境界,baseadapterview
  • Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器,simplearrayadapter
  • BaseAdapter日常的封装,baseadapter封装
  • Android开发学习——ListView+BaseAdapter的使用,androidbaseadapter
  • BaseAdapter的使用(笔记)
  • Android框架设计模式(四)——Adapter Method
  • Adapter模式实战-重构鸿洋的Android建行圆形菜单
  • 使用数据源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
  • android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)
  • ListView和Adapter的配合使用以及Adapter的重写,listviewadapter

相关文章

  • 2017-05-26Android中使用ViewPager实现屏幕页面切换和页面轮播效果,androidviewpager
  • 2017-05-26安卓--selector简单使用,安卓--selector
  • 2017-05-26安卓6.0(棉花糖)新特性汇总,安卓6.0
  • 2017-05-26golang错误处理之error
  • 2017-05-26Android 点击文字实现跳转,android跳转
  • 2017-05-222.5.5 ExpandableListView(可折叠列表)的基本使用
  • 2017-05-26实现图片拖动,图片拖动
  • 2017-05-26我的android学习经历16,android学习经历16
  • 2017-05-26Android View的绘制流程,androidview绘制
  • 2017-05-26使用Merge INTO优化SQL,性能提升巨大

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 提升Android ListView性能的几个技巧
    • Android的开机流程及对应源码位置分析,android源码
    • 我的android学习经历8,android学习经历8
    • showSetPwdDialog--自定义对话框,showsetpwddialog--
    • 手机安全卫士——缓存清理,安全卫士缓存清理
    • Android Studio 1.5.1 JNI 编程
    • Android四大组件之Activity
    • Android UI ListView的使用,androidlistview
    • 3.8 Gestures(手势)
    • 编译器开发系列--Ocelot语言6.静态类型检查,编译器--ocelot

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有