ListView这个控件使用的非常普遍,关于它的基本介绍,我们来看一下API中的介绍:

Class Overview

A view that shows items in a vertically scrolling list. The items come from theListAdapterassociated with this view.

我们的LIstView中显示的数据都是通过ListAdapter这个接口来配置的,通常是用它的某一个子类来配置数据,下面来介绍一下各种适配器以及他们的关系:

ListAdapter

implements Adapter
android.widget.ListAdapter
Known Indirect Subclasses ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, WrapperListAdapter

Class Overview

ExtendedAdapterthat is the bridge between aListViewand the data that backs the list. Frequently that data comes from a Cursor, but that is not required. The ListView can display any data provided that it is wrapped in a ListAdapter.

在ListAdapter的众多子类当中,用的最多的就是ArrayAdapter(存储数组)、SimpleAdapter(字符串)、CursorAdapter(数据库中的数据)。

在使用LIstView控件来显示数据时,有两种实现方式:

第一种实现方式: 在xml中定义<LIstView>布局对象,设置它的相关属性,然后在Activity中对它进行配置和事件监听;

第二种实现方式: 让你的 Activity 类继承ListActivity,可以通过getListView()来获取,可以不写ListView的xml文件。

本篇文章将以第二种方式为例来做一个简单的实例。

首先来认识一下ListActivity这个类:

java.lang.Object
android.content.Context
android.content.ContextWrapper
android.view.ContextThemeWrapper
android.app.Activity
android.app.ListActivity

正如名字含义,它是Activity的一个子类。

Class Overview

An activity that displays a list of items by binding to a data source such as an array or Cursor, and exposes event handlers when the user selects an item.

ListActivity hosts a ListView object that can be bound to different data sources, typically either an array or a Cursor holding query results. Binding, screen layout, and row layout are discussed in the following sections.

ListActivity has a default layout that consists of a single, full-screen list in the center of the screen

我可以直接使用内置的默认, full-screen list,当然很多时候要做一些扩充,我们可以自定义screen layout,使用setContentView() in onCreate()来显示定义的ListView, 不过这里有一要求,To do this, your own view MUST contain a ListView object with the id "@android :id/list" (or list if it's in code)

这样的原因是什么呢?

原因是我们继承ListActivity这个类,使用getListView()来取得它,系统在执行该方法的时候是按照 id= list 去查找,所以我们必须定义Id为" @android :id/list"。知道了吧!


我们通过一个在String.xml文件里面配置多个国家的名称,然后通过适配器ArrayAdapter来显示这些数据到我们的LIstView控件中,并且提供根据用户输入的匹配符,筛选出匹配的国家名称。

运行结果:

Android之UI学习篇十一:ListView控件学习(一)_第1张图片

大家可以看到国家的名称已经显示在LIstView控件当中了,当我们输入"be"是自动匹配的结果截图:

Android之UI学习篇十一:ListView控件学习(一)_第2张图片

其实这个自动匹配功能很简单,只要在代码中调用这句代码:listView.setTextFilterEnabled(true);


工程目录结构:

Android之UI学习篇十一:ListView控件学习(一)_第3张图片


以下是源代码:

MainActivity.java:

package com.listview.activity;import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends ListActivity implements OnItemClickListener {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String[] countries = getResources().getStringArray(R.array.countries_array);// 为ListView设置适配器setListAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.list_item, countries));ListView listView = getListView();//设置Item的选中事件监听器listView.setOnItemClickListener(this);//这个属性为true表示listview获得当前焦点的时候,相应用户输入的匹配符,筛选出匹配的listview ItemslistView.setTextFilterEnabled(true);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(MainActivity.this, ((TextView)view).getText(), 1).show();}}

main.xml在这里没起作用,这里就不给出代码了。

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="fill_parent"    android:padding="10dp"    android:textSize="16sp" ></TextView>

strings.xml:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, MainActivity!</string>    <string name="app_name">HelloListView</string>    <string-array name="countries_array">        <item>Bahrain</item>        <item>Bangladesh</item>        <item>Barbados</item>        <item>Belarus</item>        <item>Belgium</item>        <item>Belize</item>        <item>Benin</item>        <item>Bermuda</item>        <item>Bhutan</item>        <item>Bolivia</item>        <item>Bosnia and Herzegovina</item>        <item>Botswana</item>        <item>"Bouvet Island</item>        <item>Brazil</item>    </string-array></resources>

好了,本篇到此结束,往后会做一个更贴近项目的LIstView实例,再跟大家分享交流,谢谢!!



更多相关文章

  1. android视图切换动画:ViewAnimator类及其子类
  2. Android UI开发点点滴滴(基本控件)
  3. Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示
  4. android xml 常用控件介绍
  5. Android获取 应用程序大小,数据大小,缓存大小
  6. 【Android】Android中的数据传递(2)
  7. Android控件之ImageView,Button, ImageButton
  8. 在android里保存数据的三种形式(Saving Data)
  9. 引用自定义资源需注意数据类型

随机推荐

  1. 【Android(安卓)Native Code开发系列】一
  2. Android之父安迪·鲁宾
  3. 教你如何在 Android(安卓)使用多线程下载
  4. iOS、Android、WebOS系统体系架构的比较
  5. Android面试之----Android系统架构图及简
  6. Android之隐式意图(Intent)如何查找匹配
  7. Android上面TreeView效果
  8. Android(安卓)Handler 消息传递机制
  9. Android下的Hook初探
  10. Android(安卓)多线程编程:IntentService &