ListView的效率提高
来源:互联网 发布:淘宝店铺促销词不能用 编辑:程序博客网 时间:2024/05/05 20:22
public class people{
private String name;
private int image;
public people(String name,int image)
{
this.name=name;
this.image=image;
}
public String getName()
{
return name;
}
public int getImage()
{
return image;
}
}
public class PeopleAdapter extends ArrayAdapter{
private int itemId;
//将上下文,ListView的子布局,数据项传递进来
public PeopleAdapter(Context context,int textViewResourceId,List objects)
{
super(context,textViewResourceId,objects);
itemId=textViewResourceId;
}
public View getView(int position,View convertView,ViewGroup parent)
{
//获取当前子对象的实例
People people=getItem(position);
//通过LayoutInflater来为这个子项加载我们传入的布局。
View view=LayoutInflater.from(getContext()).inflate(itemId,null);
//通过view的findViewById()方法分别获取到TextView和ImageView的实例;
TextView textview=(TextView)view.findViewById(R.id.textview);
ImagView imageview=(ImagView)view.findViewById(R.id.imageview);
textview.setText(people.getName);
imageview.setImageResource(people.getImage);
return view;
}
}
//提升ListView的效率
//因为在PeopleAdapter中的getView()的方法每次都会将布局重新加载一遍,我们可以通过getView()中的convertView参数,用于将之前的加载好的布局进行缓存。
//修改代码如下:
public View getView(int position,View convertView,ViewGroup parent)
{
People people=getItem(position);
View view;
if(convertView==null)
{
view=LayoutInflater.from(getContext()).inflate(itemId,null);
}else{
view=convertView;
}
ImageView imageview=(ImageView)view.findViewById(R.id.imageview);
TextView textview=(TextView)view.findViewById(R.id.textview);
imageview.setImageResource(people.getImage());
textview.setText(people.getText());
return view;
}
//这时候程序不会再每次重新加载一次布局,但是依然会每次通过View的findViewByID()方法来获取控件的实例。应该借助一个ViewHolder进行优化。
//修改的代码如下:
public View getView(int position,View convertView,ViewGroup parent)
{
People people=getItem(position);
ViewHolder viewholder;
View view;
if(convertView==null)
{
view=LayoutInflater.from(getContext()).inflate(itemId,null);
viewholder=new ViewHolder();
viewholder.peopleImage=(ImageView)view.findViewById(R.id.imageview);
viewholder.peopleText=(TextView)view.findViewById(R.id.textview);
view.setTag(viewholder);//将viewholder保存在view中
}else{
view=convertView;
viewholder=(ViewHolder)view.getTag();
}
viewholder.peopleImage.setImageResource(people.getImage());
viewholder.peopleText.setText(people.getText());
return view;
}
class ViewHoder
{
ImageView peopleImage;
TextView peopleName;
}
//通过一个内部类ViewHolder用于对控件的实例进行缓存,当convertview为空的时候我们进行对布局的加载,并且通过ViewHolder对控件的实例进行缓存并且存储在通过View的setTag()方法进行保存,当convertView不为空的时候,我们通过getTag()方法将ViewHolder取出,这样所有控件的实例通保存在ViewHolder中了,每次都可以使用。
- ListView的效率提高
- 提高ListView的显示效率
- Android如何提高ListView的滑动效率
- 使用ViewHolder提高ListView的效率
- 提高listview运行效率
- android201--如何提高ListView效率
- ListView如何提高其效率?
- ListView 如何提高其效率
- Listview如何提高其效率
- 提高android应用的效率--主要讲解listview的优化
- 提高android应用的效率--主要讲解listview的优化
- 提高android应用的效率--主要讲解listview的优化
- 提高android应用的效率--主要讲解listview的优化
- 安卓自定义Adapter,以及如何提高ListView的效率
- Android探究--使用ViewHolder提高ListView效率
- 提高数据库的效率
- 提高会议的效率
- 提高程序的效率
- Perl 对象是函数的第一个参数
- GDB 的命令详解
- 打开相机拍照和从本地相册获取图片以及图片的剪切
- Kbps、KB、Mbps单位换算
- (一)Runtime 系统调用方法的过程
- ListView的效率提高
- 算法洗脑系列(8篇)——第一篇 递推思想
- maven 打包时动态替换properties,xml资源文件中的配置值
- 苹果分辨率与大小
- 22-《电子入门趣谈》第四章_自己制作电路板-4.3Altium Designer (第一部分)
- Docker:私有仓库的搭建
- COCOS-HTML5-3.9版本学习(四)chipmunk物理引擎的测试
- php 操作数据库
- WebStorm 配置 svn(转)