美文网首页
Android viewholder 的作用

Android viewholder 的作用

作者: BadGirl_TONG | 来源:发表于2018-03-15 15:51 被阅读0次

    原网址:http://www.cnblogs.com/prescheng/p/5002708.html

    相当于iOS 的dataSource吧!

    ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。

    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。

    ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}方法中进行的

    (要自定义listview都需要重写listadapter:如BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),

    优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。

    getview的加载方法一般有以下三种种方式:

    1.每一次都重新定义一个View载入布局,再加载数据(最慢的加载方式)

    public View getView(int position, View convertView, ViewGroup parent)

    {

    View view = LayoutInflater.from(context).inflate(R.layout.main_item,null);

                ImageView imageView = (ImageView)convertView.findViewById(R.id.item_img);

                TextView textView = (TextView)convertView.findViewById(R.id.item_txt);

            imageView.setBackgroundResource(imgs[position]);

            textView.setText(strs[position]);

            return view;

    }

    2.当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据(正常的加载方式)

    public View getView(int position, View convertView, ViewGroup parent)

    {

    if(convertView = null){

    convertView = LayoutInflater.from(context).inflate(R.layout.main_item,null);

                }

            ImageView imageView = (ImageView)convertView.findViewById(R.id.item_img);

            TextView textView = (TextView)convertView.findViewById(R.id.item_txt);

            imageView.setBackgroundResource(imgs[position]);

            textView.setText(strs[position]);

            return convertView;

    }

    3.定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可(最快的加载方式)

    class ViewHolder{

            ImageView imageView;

            TextView textView;

        }publicView getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;

            if(convertView ==null){

                convertView = LayoutInflater.from(context).inflate(R.layout.main_item,parent,false);

                holder =new ViewHolder();

                holder.imageView = (ImageView)convertView.findViewById(R.id.item_img);

                holder.textView = (TextView)convertView.findViewById(R.id.item_txt);

                convertView.setTag(holder);

            }else {

                holder = (ViewHolder)convertView.getTag();

            }

            holder.imageView.setBackgroundResource(imgs[position]);

            holder.textView.setText(strs[position]);

            return convertView;

        }

    相关文章

      网友评论

          本文标题:Android viewholder 的作用

          本文链接:https://www.haomeiwen.com/subject/udyhqftx.html