列表视图(ListView)是Android平台下用于显示不定数量的数据最有用的视图控件之一。在这个教程中,我们将向你展示如何使用ListView来浏览文章列表。
在之前的文章中,你看到了许多关于不同布局控件的教程。在今天这个教程中,你将结合使用它们。应用程序本身非常简单:它将显示文章标题列表,当点击标题时,显示文章内容。这篇文章的节奏将比我们的入门教程更快一些。如果你对基本的Android控件或概念不熟悉你可能需要复习这个网站上我们其它的一些教程,甚至是Android API参考。最终的开源代码可以在Google code上下载到。
步骤0: 创建项目
在Eclipse中创建一个新的Android项目。我们将项目命名为MT-List,起始活动命名为TutListActivity。这个Activity必须继承ListActivity类,它是一个特殊的Activity类,用于帮助管理ListView控件。我们使用的是Android2.3.3的API。
步骤1: 设计列表界面
实际上,这一步要做的很少。一个由重复项组成的ListView控件,每一项都有相同的布局(一项一个模板)。我们想要显示一个文章标题列表。每个标题都是ListView中的一项。因此,每个列表项的模板只需要一个TextView控件。在你的项目中添加一个叫做list_item.xml布局资源文件,它描述了列表中的每一项的模板布局。在这个例子中,它看起来可能像这样:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:padding="6dp" />
字号加上填充属性值要确保在平均大小的屏幕下列表每一项对于平均手指的大小来说是足够大的触摸目标。
步骤2: 为ListView填充数据
ListView控件设计用于从数据源加载数据。可以使用适配器从数据库,数组或其它数据源读取数据。在这个程序中我们使用数组作为数据源。今后,你可以将数组替换为某些实时数据源。在你的项目中创建两个字符串数组(你可以将他们添加到strings.xml或者一个分离的arrays.xml文件,随你愿意)。将一个数组取名为"tut_titles",另一个名为"tut_links"。用网站上的有效的标题和URL填充这两个数组。下面是我们的数组:
<string-array name="tut_titles">
<item>Design & Build a 1980s iOS Phone App: Design Comp Slicing</item>
<item>Best of Tuts+ in February 2011</item>
<item>Create a Brick Breaker Game with the Corona SDK: Game Controls</item>
<item>Exporting Graphics for Mobile Apps: PNG or JPEG?</item>
<item>Android Tablet Design</item>
<item>Build a Titanium Mobile Pizza Ordering App: Order Form Setup</item>
<item>Create a Brick Breaker Game with the Corona SDK: Application Setup</item>
<item>Android Tablet Virtual Device Configurations</item>
<item>Build a Titanium Mobile Pizza Ordering App: Topping Selection</item>
<item>Design & Build a 1980s iOS Phone App: Interface Builder Setup</item>
</string-array>
<string-array name="tut_links">
<item>http://mobile.tutsplus.com/tutorials/mobile-design-tutorials/80s-phone-app-slicing/</item>
<item>http://mobile.tutsplus.com/articles/news/best-of-tuts-in-february-2011/</item>
<item>http://mobile.tutsplus.com/tutorials/corona/create-a-brick-breaker-game-with-the-corona-sdk-game-controls/</item>
<item>http://mobile.tutsplus.com/tutorials/mobile-design-tutorials/mobile-design_png-or-jpg/</item>
<item>http://mobile.tutsplus.com/tutorials/android/android-tablet-design/</item>
<item>http://mobile.tutsplus.com/tutorials/appcelerator/build-a-titanium-mobile-pizza-ordering-app-order-form-setup/</item>
<item>http://mobile.tutsplus.com/tutorials/corona/corona-sdk_brick-breaker/</item>
<item>http://mobile.tutsplus.com/tutorials/android/android-sdk_tablet_virtual-device-configuration/</item>
<item>http://mobile.tutsplus.com/tutorials/appcelerator/pizza-ordering-app-part-2/</item>
<item>http://mobile.tutsplus.com/tutorials/iphone/1980s-phone-app_interface-builder-setup/</item>
</string-array>
当然这个数据是静态的。在一些情况下,使用静态数据对于一个ListView来说也是有意义的。对于这些情况,使用一个字符串数组资源非常简单和方便。需要确保标题和链接的排序是一致的,这样两个数组才能匹配。