起源:ListView是Android开发中使用最广泛的一种控件,它以垂直列表的形式显示所有列表项。

创建ListView有两种方式:

☆ 直接使用ListView进行创建。

☆让Activity继承ListActivity。

一旦在程序中获得了ListView之后,接下来就需要为ListView设置它要显示的列表子项,借助Adapter来实现。

ListView常用XML属性

下面通过一个简单的例子来展示ListView的基本使用方法,效果图见文章结尾。

一、XML Code

1.activiyt_main.xml

在主xml文件内只添加一个ListView控件。

代码如下:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"> <ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView> </LinearLayout>

2.item.xml

在这个xml内设置每个子列的布局样式,此处简单添加一个ImageView和TextView,分别用来显示汽车Logo和品牌。

代码如下:

 <?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="match_parent"
android:orientation="horizontal"
android:padding="5dp"
android:background="#FFFFFF"> <ImageView
android:id="@+id/car_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/car_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"/> </LinearLayout>

二、Java Code

首先从网上下了一组汽车Logo作为素材。

接着定义一个实体类,作为ListView适配器的适配类型。

1.Car.java

Car类只有两个属性:品牌名字和LogoId,以及getName()和getLogoId两个方法。

代码如下:

 package com.michael.listviewtest;

 public class Car {

     private String name;

     private int logoId;

     public Car(String name, int logoId) {
this.name = name;
this.logoId = logoId;
} public String getName() {
return name;
} public int getLogoId() {
return logoId;
} }

前文已经讲过,若想展现ListView内的子项,需要创建一个自定义的适配器。此处将自定义的适配器继承自ArrayAdapter,并将泛型指定为Car类。

2.CarAdapter.java

重点重写getView()方法,这个方法在每个子项被滚动到屏幕内时都会被调用。首先通过getItem()方法得到当前子项的Car实例。为了提高性能,对ListVie进行适当优化。在CarAdapter类增加一个内部类ViewHolder,用于对控件的实例进行缓存。当convertView为空的时候,首先使用LayoutInflater的inflater()方法为子项加载传入的布局,再创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用ViewHolder的setTag()方法,将ViewHolder对象存储在View中。当convertView不为空时则调用View的getTag()方法,把ViewHolder重新取出。这样的话,所有的控件实例都缓存在ViewHolder里,省去了每次通过findVoewById()方法来获取控件实例的步骤,提高了ListView的运行效率。

代码如下:

 package com.michael.listviewtest;

 import java.util.List;

 import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView; public class CarAdapter extends ArrayAdapter<Car>{ private int resourceId; public CarAdapter(Context context, int resource, List<Car> objects) {
super(context, resource, objects);
resourceId = resource;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
Car car = getItem(position);
View view;
ViewHolder viewHolder;
if(convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, null);
viewHolder = new ViewHolder();
viewHolder.carLogo = (ImageView)view.findViewById(R.id.car_logo);
viewHolder.carName = (TextView)view.findViewById(R.id.car_name);
view.setTag(viewHolder);
}else {
view = convertView;
viewHolder = (ViewHolder)view.getTag();
}
viewHolder.carLogo.setImageResource(car.getLogoId());
viewHolder.carName.setText(car.getName());
return view;
} class ViewHolder {
ImageView carLogo;
TextView carName;
}
}

3.MainActivity.java
      最后把视图的加载,数据的初始化以及ListView和Adapter的适配操作添加到MainActivity里。
      此外为ListView的每个子项添加一个点击事件,通过setOnItemClickListener()方法,并重写onItemClick()方法,此处就通过Toast子项包含实例的名字简单实现。
代码如下:

 package com.michael.listviewtest;

 import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast; public class MainActivity extends Activity { private List<Car> carLists = new ArrayList<Car>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initCars();
CarAdapter adapter = new CarAdapter(MainActivity.this, R.layout.item, carLists);
ListView listView = (ListView)findViewById(R.id.list_view);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Car car = carLists.get(position);
Toast.makeText(MainActivity.this, car.getName(), Toast.LENGTH_SHORT).show();
}
});
} public void initCars() {
Car lotus = new Car("Lotus", R.drawable.lotus);
carLists.add(lotus);
Car lamboghini = new Car("Lamboghini", R.drawable.lamboghini);
carLists.add(lamboghini);
Car bmw = new Car("BMW", R.drawable.bmw);
carLists.add(bmw);
Car fiat = new Car("Fiat", R.drawable.fiat);
carLists.add(fiat);
Car cadillac = new Car("Cadillac", R.drawable.cadillac);
carLists.add(cadillac);
Car mercedes = new Car("Mercedes", R.drawable.mercedes);
carLists.add(mercedes);
Car skoda = new Car("Skoda", R.drawable.skoda);
carLists.add(skoda);
Car volvo = new Car("Volvo", R.drawable.volvo);
carLists.add(volvo);
Car nissan = new Car("Nissan", R.drawable.nissan);
carLists.add(nissan);
Car ferrari = new Car("Ferrari", R.drawable.ferrari);
carLists.add(ferrari);
Car porsche = new Car("Porsche", R.drawable.porsche);
carLists.add(porsche);
Car rollsroyce = new Car("Rollsroyce", R.drawable.rollsroyce);
carLists.add(rollsroyce);
}
}

效果图如下:

转载请注明出处:http://www.cnblogs.com/michaelwong/p/4114939.html

ListView的简单使用和性能优化的更多相关文章

  1. 10种简单的Java性能优化

    你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了很多简单方便的性能优化小贴士以及扩展程序性能的技巧. 最近“全网域(Web Scale)”一词被炒得火热,人 ...

  2. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

  3. 10种简单的Java性能优化(转)

    本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加入翻译小组.转载请见文末要求. 你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了 ...

  4. 基于GruntJS前端性能优化

    在本文中,如何使用GruntJS为了使治疗简单的前端性能优化自己主动,我写了一个完整的样本放在Github上.能够參考一下.关于Yahoo的前端优化规则请參考:Best Practices for S ...

  5. Windows Server2008 R2性能优化方法

    经常使用的是Windows 2008R2企业版的服务器,简单总结一下性能优化的方法 ========================================================== ...

  6. Java 性能优化的五大技巧

    要对你的 Java 代码进行优化,需要理解 Java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的.使用下面这五个技巧和资源,开始学习如何分析和优化你的代码吧. 在我们开始之前, ...

  7. 【腾讯Bugly干货分享】跨平台 ListView 性能优化

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...

  8. Android ListView性能优化实例讲解

    前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListVi ...

  9. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

随机推荐

  1. HOOK钩子 - 钩子函数说明

    翻译参考自MaybeHelios的blog: http://blog.csdn.net/maybehelios/ 通过SetWindowsHookEx方法安装钩子,该函数指定处理拦截消息的钩子函数(回 ...

  2. java创建对象的几种常用方法

    java几种常见的创建对象的方法: 1.使用new关键字创建对象 2.利用java的反射机制,通过java.lang.Class或者java.lang.reflect.Constructor创建对象 ...

  3. 一个很奇特的异常 tmpFile.renameTo(classFile) failed

    刚换新电脑 win8+迈克菲 ,当tomcat把默认端口更改后(或者是启动了迈克菲的实时扫描),部署工程后,主页打不开了. 杀毒软件都会造成这个问题 百度杀毒全家桶 360全家桶 关掉就好了 .怀疑是 ...

  4. I/O浅析

    1.为什么需要I/O? 因为程序需要从别的文件中获取内容或者程序要将自身的内容传入到文件中. 2.流种类的概述 1.字节流和字符流 字节流的基础单位是byte                  字符流 ...

  5. python 通过ntlm验证下载文件

    最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...

  6. co & thunkify

    co 之前在generator中已经介绍过Co了 戳这里 http://www.cnblogs.com/cart55free99/p/4893498.html co一般和thunkify一起使用 能够 ...

  7. android,在fragment中使用listview,不使用listfragment

    public class LeftFragment extends Fragment{ private ListView listView; @Override public View onCreat ...

  8. C语言的本质(6)——位运算

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  9. 本地/远程Service 和Activity 的交方式(转)

    android SDK提供了Service,用于类似*nix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Remo ...

  10. VS2010中xercesc配置及简单示例

    从官网下载xerces-c-3.1.1并解压,打开工程项目 xerces-c-3.1.1\projects\Win32\VC10\xerces-all\xerces-all.sln, 选择Xerces ...