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控件中,并且提供根据用户输入的匹配符,筛选出匹配的国家名称。

运行结果:


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


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


工程目录结构:



以下是源代码:

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中的selector
  4. Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示
  5. 布局(2、相对布局)
  6. 代码中如何设置TextView为不可见
  7. Android开发神贴整理
  8. Android学习资源网站
  9. Android(安卓)中使用自定义字体的方法

随机推荐

  1. android 4.0 以上平台选择图片报错Attemp
  2. Android中获取系统上安装的APP信息
  3. Unity与Android交互-扩展Unity的MainActi
  4. android 文件上传的类--完整 可以直接被
  5. android(NDK+JNI)---Android(安卓)JNI开
  6. android activity 生命周期详解
  7. 树莓派3(全志A20)Android固件编译
  8. 站在大神肩膀上,深入理解 Android事件分发
  9. :Android核心模块及相关技术
  10. android中SMS