android 之如何优化 ListView

众所周知,在开发过程中,ListView的优化是比较重要的

那么,如何去优化呢?

ListView的提升效率,其实就是在于adapter中getView方法的优化,那么如何使的getView优化呢?

1、在getView() 中重用了convertView,很大程度上的减少了内存的消耗。通过判断convertView是否为null,

是的话就需要产生一个视图出来,然后给这个视图数据,最后将这个视图返回给底层,呈献给用户。

比如:listview 屏幕显示10条数据,当用户滑动listview的时候,第11条数据出现的时候,第一条数据

就会被android本身提供的  Recycler,将这条item(View)放进RecycleBin(回收站)中,然后显示新视

图的时候,从RecycleBin中重复用这个View。就不会造成每次都要去创建新的View,而节约了大量的资源。

2、自身写一个ViewHold 类,这个ViewHolder,用来标识view中一些控件,方便进行一些事件相应操作的设置,

这样就不用每次getView() 的View只要找一次控件就好了,不用每次都去寻找

代码表示如下:

// getView 方法的优化

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

if (convertView == null) {

convertView = LayoutInflater.from(parent.getContext()).inflate(

R.layout.activity_list_item, null);

ViewHolder viewHolder = new ViewHolder(convertView);

convertView.setTag(viewHolder);

}

ViewHolder viewHolder = (ViewHolder) convertView.getTag();

viewHolder.fillView(getItem(position));

return convertView;

}

//  这个类是View的显示,也就是Listview的每条显示的东西

class ViewHolder {

private ImageView iv_NewsImage;

private TextView tv_NewsTitle;

private TextView tv_NewsDate;

public ViewHolder(View convertView) {

iv_NewsImage = (ImageView) convertView.findViewById(R.id.newImage);

tv_NewsTitle = (TextView) convertView.findViewById(R.id.newTitle);

tv_NewsDate = (TextView) convertView.findViewById(R.id.newDate);

}

public void fillView(Object item) {

final NewsInfo news = (NewsInfo) item;

tv_NewsTitle.setText(news.getNewTitle());

tv_NewsDate.setText(getDate(news.getNewDate()));

ImageLoader.getInstance().displayImage(news.getNewImageUrl(),

iv_NewsImage);

}

private String getDate(long time) {

Date date = new Date(time);

SimpleDateFormat formatter = new SimpleDateFormat(

"yyyy-MM-dd  HH:mm:ss");

return formatter.format(date);

}

}

时间: 2024-08-06 07:59:27

android 之如何优化 ListView的相关文章

[转载]Android利用convertView优化ListView性能

本的getView写法 Java代码public View getView(int position, View convertView, ViewGroup parent) {View view = new View(); //通过inflate等找到布局 然后findViewById等 设置各个显示的item return view;} 而在ListView滑动的过程中 很容易就会发现每次getView被执行 都会new出一个View对象 长此以往会产生很大的消耗 特别当item中还有Bit

android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/47720257 问题产生 这算是刚到实习公司接触到的第一个任务.公司某一产品中某个界面的listView高速滑动会有卡顿的现象发生,我的任务就是解决它. 产生原因分析 我一開始的想法比較简单.可能是listview的优化没有做到位,比如convertView的复用.viewHolder的使用等等基础

Ace教你一步一步做Android新闻客户端(五) 优化Listview

今天写存货了 调试一些动画参数花了些时间 ,嘿嘿存货不多了就没法做教程了,今天来教大家优化listview,等下我把代码编辑下 这次代码有些多 所以我把条理给大家理清楚.思路就是把加载图片的权利交给OnScrollListener . 1 首先来到 NewsAdapter这个类 ,我们给他实现了一个 AbsListView.OnScrollListener 这个接口,这个接口有两个方法: @Override public void onScrollStateChanged(AbsListView

android问题及其解决-优化listView卡顿和如何禁用ListView的fling

问题解决-优化listView卡顿和如何禁用ListView的fling 前戏很长 问题产生 这算是刚到实习公司接触到的第一个任务.公司某一产品中某个界面的listView快速滑动会有卡顿的现象发生,我的任务就是解决它. 产生原因分析 我一开始的想法比较简单,可能是listview的优化没有做到位,例如convertView的复用.viewHolder的使用等等基础的优化措施,然并卵.好长时间后终于找到了问题发生的相关代码...经过在可疑语句上(onTouchEvent方法中的几个case.on

Android - ViewHolder优化ListView

在Android开发中, ListView是重要的组件, 它以列表形式根据数据的长度, 自适应展示具体内容. 用户可以自由的定义ListView每一列的布局. 当listview有大量数据需要加载的时候, 会占据内存, 影响性能. 这时候就需要按需填充, 并重新使用View, 减少对象的创建. ListView加载数据都是在getView()方法中进行. 同时, 需要自定义ListView重写ListAdapter: 如BaseAdapter, SimpleAdapter, CursorAdap

Android加载数据ListView优化内存实现

问题分析 在移动端项目开发中,基于加载大数据量的原因,经常出现内存溢出的现象,那么减少内存占用,在真实开发中着实很重要,下面介绍下ListView加载数据量大时解决思路: 我们应该碰到过这样的情况,对于加载的listview,我们慢慢滑动数据时,系统加载数据没有问题,但是当加快滑动数据时,就会出现内存溢出的问题(这里不考虑分页加载方法).总结这是因为手机屏幕显示的原因,每次加载数据是有限的,慢慢滑动数据,在加载数据的同时,系统能有时间回收不用的内存,才不会暴露问题,但是,加快滑动,内存回收GC来

Android课程---优化ListView列表视图(2)

layout_simple.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content

Android课程---优化ListView列表视图

activity_ui4.xml <?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

常用的优化ListView效率的方法及其原理

在Android开发中,ListView的使用频率及其高,可以说99%的应用中你都可以看到他的身影. 在日常的开发工作中,我们一般会通过以下方法来优化ListView的效率: 1.复用getView方法中的convertView 一个ListView可能有很多Item,但是限于手机屏幕非常有限,所以只能显示很少的一部分Item,比如能显示10个,那么Android会在ListView中保存多余10个的Item, 溢出屏幕的Item会被回收到一个池子中,以备后用,那么就不用从新new出View对象