文档章节

Android之UI学习篇十一:ListView控件学习(一)

yolinfeng
 yolinfeng
发布于 2015/02/16 00:17
字数 1014
阅读 126
收藏 1

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

Class Overview


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

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

ListAdapter

implements  Adapter
android.widget.ListAdapter
Known Indirect Subclasses

Class Overview


Extended Adapter that is the bridge between a ListView and 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 {
	@Override
	public 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 Items
		listView.setTextFilterEnabled(true);
	}

	@Override
	public 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实例,再跟大家分享交流,谢谢!!



本文转载自:http://blog.csdn.net/wulianghuan/article/details/8589413

yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
私信 提问
Android学习-列表视图ListView

一、简介: ListView,列表视图,直接继承了AbsListView,是一个以垂直方式在项目中显示View视图的列表。ListView的数据项,来自一个继承了ListAdapter接口的适配器。 二、新建一个包listvie...

YouChaoMin
2018/11/28
0
0
【压岁干货】精彩技术博客+优秀源码集锦

虽然2015年已经过了一月有余,但在中国,好像只有过了春节才算进入新的一年。眼看着这也春节倒计时了,大家好像又都忙了起来,赶项目赶项目…… 从DevStore整理了一些优秀的技术博客和源码作...

牵着蜗牛去西藏
2015/02/04
1K
4
Android开发学习的同学们的一些建议

我写到了想学习android的同学应该要掌握的一些java基础知识,虽然写的是基础,但是其实往往很多的学员们走上工作岗位上就会真正发现基础决定了你的上层建筑能否搭建好!今天,在这篇日志中,...

浮生侃侃
2016/04/19
135
0
给学android的同学们的一些建议

我写到了想学习android的同学应该要掌握的一些java基础知识,虽然写的是基础,但是其实往往很多的学员们走上工作岗位上就会真正发现基础决定了你的上层建筑能否搭建好!今天,在这篇日志中,...

星空夜愿
2016/04/16
214
0
view-ListView学习

LiastView网上有很多,推荐如下: 1、android ListView详解: http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 2、Android中ListView的性能问题 http://android.tgbus.com/A......

工作日
2011/12/27
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

搭建高可用MongoDB集群(分片)

搭建高可用MongoDB集群(分片) MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https://blog.51cto.com/kaliarch/2044618 一、概述 1.1 背景 ......

linjin200
6分钟前
1
0
CDH6.0.1集成tez-0.9.1计算引擎

参考文章: https://www.jianshu.com/p/9fb9f32e1f0f https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000......

Sheav
8分钟前
1
0
Vue内置指令的使用

v-model(数据绑定) v-model常用于表单数据的双向绑定,它本质上是一个语法糖。它主要的有两种应用: 在文本框、多行文本、input的下拉框、单选按钮、复选框中的应用 <div id="app"> ...

凌兮洛
9分钟前
1
0
外部来源应用检查-烦死了,终于找到解决设置了

Android 连接usb调试应用的时候: 华为关闭方法:1、设置-安全-更多安全设置,关掉外部来源应用检查。2、设置-系统-开发人员选项-关闭“监控ADB安装应用” 不知道OPPO 怎么关闭的?...

QGlaunch
10分钟前
2
0
6个K8s日志系统建设中的典型问题,你遇到过几个?

作者 | 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使...

阿里云官方博客
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部