码迷,mamicode.com
首页 > 移动开发 > 详细

Android中ListView的使用以及提升ListView的运行效率

时间:2016-07-08 18:06:05      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

ListView是安卓中非常常用的一个控件,可以用来展示一系列的数据,下面来介绍下ListView的用法和如何提升ListView的效率

ListView的使用遵循MVC模式,m是实体,v是视图(即为ListView),C是控制器(即未适配器adapter)

使用ListView一般可以遵循以下步骤

一、定义一个ListView展示的条目的布局

list_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/iv_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/tv_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="20sp"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:text="测试应用" />

</RelativeLayout>

  

二、定义一个数据实体(javabean)

package com.jsako.listviewdemo.domain;

import android.graphics.drawable.Drawable;

public class AppInfo {
    
    private String appName;
    private Drawable appIcon;
    @Override
    public String toString() {
        return "AppInfo [appName=" + appName + ", appIcon=" + appIcon + "]";
    }
    public String getAppName() {
        return appName;
    }
    public void setAppName(String appName) {
        this.appName = appName;
    }
    public Drawable getAppIcon() {
        return appIcon;
    }
    public void setAppIcon(Drawable appIcon) {
        this.appIcon = appIcon;
    }
    
    
}

三、初始化数据(准备好需要展示的数据,可以读取数据库获取,可以通过网络下载获取)

private List<AppInfo> appInfos=new ArrayList<AppInfo>();
private
void initAppInfos() { List<ApplicationInfo> infos=pm.getInstalledApplications(0); AppInfo appInfo; for(ApplicationInfo info:infos){ appInfo=new AppInfo(); appInfo.setAppIcon(info.loadIcon(pm)); appInfo.setAppName(info.loadLabel(pm).toString()); appInfos.add(appInfo); } }

四、定义一个适配器内部类

private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return appInfos.size();
            
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view;
            ViewHolder holder;
            if(convertView!=null){
                view=convertView;
                holder=(ViewHolder) view.getTag();
            }else{
                view=View.inflate(getApplicationContext(), R.layout.list_item, null);
                holder=new ViewHolder();
                holder.iv_icon=(ImageView) view.findViewById(R.id.iv_icon);
                holder.tv_text=(TextView) view.findViewById(R.id.tv_text);
                view.setTag(holder);
            }
            holder.iv_icon.setImageDrawable(appInfos.get(position).getAppIcon());
            holder.tv_text.setText(appInfos.get(position).getAppName());
            return view;
        }
        
        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }
        
        class ViewHolder{
            ImageView iv_icon;
            TextView tv_text;
        }
    }

五、找到ListView的对象,然后设置适配器

lv=(ListView) findViewById(R.id.lv_show);
        lv.setAdapter(new MyAdapter());

以上就是ListView的基本使用方法,下面我们来谈谈提升ListView的效率

1、在MyAdapter里的getView方法中,ListView没显示一条条目都会调用该方法一次,里面有个参数是convertView,这个参数用于将之前加载好的布局进行缓存,以便以后进行重用

所以我们可以对convertView进行判断,判断它是否为null,如果不为null则复用它,如果为null则通过View.inflate()方法加载一个布局view对象。这样就可减少对内存的开销,复用以前的缓存,提升效率。

2、再则新增了一个内部类ViewHolder,用于对每个小条目里的控件的实例进行缓存。然后当convertView为null的时候将ViewHolder的实例通过view.setTag()保存起来,在convert不为空的时候将ViewHolder的实例通过view.getTag()取出,

然后设置对应的值。这样就能避免ListView每次调用getView的时候都调用view.findViewById(),这个方法非常耗时,降低性能。采取ViewHolder内部类的这种方法能提升效率。

 

Android中ListView的使用以及提升ListView的运行效率

标签:

原文地址:http://www.cnblogs.com/Jsako/p/5653862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!