您的位置:首页 > 其它

ListView内存优化

2015-11-17 15:41 381 查看
ListView很适合用来展示一系列的数据,例如新闻应用的页面大都是用ListView实现的,但是listview也是比较耗内存的一种部件

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示

这里就展示优化

Adapter数据源

package com.leige.listviewyuhua;

import java.util.List;
import java.util.zip.Inflater;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ItemAdapter extends BaseAdapter {
private List<ItemBean> beanList;
private LayoutInflater layoutInflater;
public ItemAdapter(List<ItemBean> beanList,Context context) {

this.beanList = beanList;
this.layoutInflater=LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return beanList.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return beanList.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

//获取布局
long start=System.nanoTime();
//没有优化
/* View view=layoutInflater.inflate(R.layout.item,null);
ImageView imageView=(ImageView) view.findViewById(R.id.image);
TextView title=(TextView) view.findViewById(R.id.tv_title);
TextView content=(TextView) view.findViewById(R.id.tv_content);
//准备数据源,实例化布局
ItemBean bean=beanList.get(position);
imageView.setImageResource(bean.getImage());
title.setText(bean.getTitle());
content.setText(bean.getContent());
*/
//优化一点
/* if(convertView==null){
convertView=layoutInflater.inflate(R.layout.item, null);

}
ImageView imageView=(ImageView) convertView.findViewById(R.id.image);
TextView title=(TextView) convertView.findViewById(R.id.tv_title);
TextView content=(TextView) convertView.findViewById(R.id.tv_content);
//准备数据源,实例化布局
ItemBean bean=beanList.get(position);
imageView.setImageResource(bean.getImage());
title.setText(bean.getTitle());
content.setText(bean.getContent());*/

//优化最多

ViewHolder viewHolder;
if(convertView==null){
convertView=layoutInflater.inflate(R.layout.item, null);
viewHolder=new ViewHolder();
viewHolder.imageView=(ImageView) convertView.findViewById(R.id.image);
viewHolder.title=(TextView) convertView.findViewById(R.id.tv_title);
viewHolder.content=(TextView) convertView.findViewById(R.id.tv_content);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder) convertView.getTag();

}
ItemBean bean=beanList.get(position);
viewHolder.imageView.setImageResource(bean.getImage());
viewHolder.title.setText(bean.getTitle());
viewHolder.content.setText(bean.getContent());
long end=System.nanoTime();
Log.d("err",(end-start)+"");
return convertView;
}
class ViewHolder{
public ImageView imageView;
public TextView title;
public TextView content;
};
}
每一个Item数据源
package com.leige.listviewyuhua;

import android.widget.ImageView;
import android.widget.TextView;

public class ItemBean {
private int image;
private String title;
private String content;
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}

}
活动类
package com.leige.listviewyuhua;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class MainActivity extends Activity {
private ListView listView;
private List<ItemBean> beanList=new ArrayList<ItemBean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView) findViewById(R.id.listView);
for(int i=0;i<20;i++){
ItemBean item=new ItemBean();
item.setImage(R.drawable.ic_launcher);
item.setTitle("我是标题"+i);
item.setContent("磊哥无敌"+i);
beanList.add(item);
}
ItemAdapter adapter=new ItemAdapter(beanList,this);
listView.setAdapter(adapter);

}

}


Item.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<ImageView
android:id="@+id/image"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/ic_launcher"

/>
<TextView
android:id="@+id/tv_title"
android:gravity="center"
android:textSize="25sp"
android:textColor="#ff0000"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/image"
android:layout_toRightOf="@+id/image"
android:text="@string/title"
/>
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_toEndOf="@+id/image"
android:layout_toRightOf="@+id/image"
android:layout_below="@+id/tv_title"
android:text="@string/content"
/>
</RelativeLayout>


效果图

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