温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在android中对listview进行优化

发布时间:2021-01-06 16:44:03 来源:亿速云 阅读:192 作者:Leah 栏目:移动开发

这篇文章给大家介绍如何在android中对listview进行优化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1、listview在定义的时候宽和高最好固定一下,这样可以减少listview测量次数,避免每次加载的时候都要去进行测量。

2、分页加载,这也是优化之一,优化内存,还有体验感,有兴趣的可以试试大数据加载;

3、convertView 就是布局的复用;

4、ViewHolder的使用 目的减少findviewByID的次数;

下面代码验证一下3和4。

如何在android中对listview进行优化

public View getView(int position, View convertView, ViewGroup parent) {
  Log.e("========>>>>>", "getView-----position" + position);
  convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  return convertView;
}

也就是说如果这样写的话每次都会进行布局的填充(滑动一下你就会发现每次都会打印日志),找到相应的布局,如果每次都去填充的话肯定浪费资源,所以我们这样去写

public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    Log.e("========>>>>>", "getView-----position" + position);
  } else {
  }
  return convertView;
}

如何在android中对listview进行优化

你会看到日志始终是这几个数据(如果你页面显示5个那个这里的数据就应该是六条会比显示的数据多一条)。

ViewHolder

如果不使用viewHolder的话代码就是这样的

public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  }
  TextView textView = convertView.findViewById(R.id.tv);
   textView.setText(mArrayList.get(position));
  return convertView;
}

很明显这段代码每次textview 都得findViewById;你可能会说你可以在if判断里面findViewById啊,然后在if外边赋值啊,你可以试试 你会发现很有意思的事情,上下滑动几次,你会发现数据就会混乱,并且重复数据很多。这样显然是不符合我们的要求的;

public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder viewHolder;
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    viewHolder = new ViewHolder();
    viewHolder.mTextView = convertView.findViewById(R.id.tv);
    convertView.setTag(viewHolder);
  } else {
    viewHolder = (ViewHolder) convertView.getTag();
  }
  viewHolder.mTextView.setText(mArrayList.get(position));
  return convertView;
}

public static class ViewHolder {
  private TextView mTextView;
}

关于如何在android中对listview进行优化就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI