游戏技术文章

BaseAdapter获取View之三重境界

时间:2017-2-13 14:04:03  作者:棋牌资源网  来源:棋牌资源网  查看:8921  评论:0
内容摘要:在BaseAdapter获取View之前,BaseAdapter需要与数据源相关联。可以使用构造方法:   private List baseListItems;   private LayoutInflater mInflate;      //...
在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;
    }  
总结:在开发过程中,应尽量使用文艺式,这样有利于充分利用资源,同事优化了开发效率。
标签:BaseAdapter获取View之三重境界 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2024 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved