您的位置:首页 > 移动开发 > Android开发

android 之如何优化 ListView 简单解释

2015-04-23 16:25 330 查看
众所周知,在开发过程中,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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: