前面写了3篇关于android的文章,其中的演示程序都写在了一个工程中,当时为了方便测试就在启动页MainActivity中放了3个按钮,点击不同的按钮进入不同的示例程序页面,MainActivity的界面如下截图:

按照上面的设计,每写一个演示程序就需要在MainActivity中新增一个按钮并为其写点击事件,感觉这样有点麻烦,于是想改进一下,顺便用一下ListView和ArrayAdapter。经过改进后的启动页如下图:

新建了一个MainActivity2,用一个ListView来展现演示程序列表,点击相应列表项就跳转到相应的演示页面,功能和之前的MainActivity一样,但之后就不需要不断添加按钮及其点击事件了,只需要为每个演示页面添加一行代码:catalogs.add(new Catalog("演示的名称", 要跳转到的Activity.class)),这样就简洁多了,具体代码如下。

MainActivity2布局文件如下:

<?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="vertical" > <ListView
android:id="@+id/lvCatalog"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView> </LinearLayout>

MainActivity2 Java代码如下:

package chengyujia.demo.aty;

import java.util.ArrayList;
import java.util.List; import android.content.Intent;
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 chengyujia.demo.R;
import chengyujia.demo.model.Catalog; public class MainActivity2 extends BaseActivity { private ListView lvCatalog;
private List<Catalog> catalogs; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
lvCatalog = (ListView) findViewById(R.id.lvCatalog);
init();
} private void init() {
catalogs = new ArrayList<Catalog>();
// 为主页目录添加条目,以后每多写一个例子,在这里添加一个条目就可以了。
// 不像以前MainActivity中每多写一个例子,需要添加一个按钮,还要写相应的点击事件。
catalogs.add(new Catalog("屏幕方向", OrientationActivity.class));
catalogs.add(new Catalog("打电话", CallActivity.class));
catalogs.add(new Catalog("版本信息", VersionActivity.class)); // 这里ListView的适配器选用ArrayAdapter,ListView中每一项的布局选用系统的simple_list_item_1。
ArrayAdapter<Catalog> adapter = new ArrayAdapter<Catalog>(this, android.R.layout.simple_list_item_1, catalogs);
lvCatalog.setAdapter(adapter); // 通过一个实现OnItemClickListener接口的匿名类的onItemClick方法来处理ListView中每一项的点击事件。
lvCatalog.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startActivity(new Intent(MainActivity2.this, catalogs.get(position).cls));
}
});
}
}

在这里还使用了一个自定义的Model类Catalog,用来表示列表中的每一项绑定的数据,其代码如下:

package chengyujia.demo.model;

import android.app.Activity;

//主页目录列表项
public class Catalog { // 条目名称
public String name;
// 点击条目要跳转到的目标Activity的类型
public Class<? extends Activity> cls; // 写个带参数的构造方法,方便赋值使用。
public Catalog(String name, Class<? extends Activity> cls) {
this.name = name;
this.cls = cls;
} // ListView使用ArrayAdapter<T>时每个列表项显示的内容就是T的toString方法返回的值,
// 如果这里不重写则会调用父类Object的toString方法。
@Override
public String toString() {
return name;
}
}

Catalog类中注意的是一定要重写toString方法,不然的话ListView的每一项显示的是“对象的类名+@+hashCode”的组合字符串。

Android ListView ArrayAdapter 的简单使用的更多相关文章

  1. Android简易实战教程--第十八话《ListView显示,简单的适配器SimpleAdapter》

    本篇介绍Listview的显示,对于listview有许多的适配器,如ArrayAdapter,BaseAdapter,SimpleAdapter等等.本篇先热身一下,介绍最简单的SimpleAdap ...

  2. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  3. Android(java)学习笔记132:ListViewProject案例(ListView + ArrayAdapter)

    1.首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.List ...

  4. Android(java)学习笔记74:ListViewProject案例(ListView + ArrayAdapter)

    1. 首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.Lis ...

  5. 安卓 android ListView 数据填充

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  6. 【Android UI】Android ListView详解

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  7. android ListView详解继承ListActivity

    [转]http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 在android开发中ListView是比较常用的组件,它以列表的形式展 ...

  8. Android ListVIew 详解(一)

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  9. (转)android ListView详解

    转自:  http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 在android开发中ListView是比较常用的组件,它以列表的形 ...

随机推荐

  1. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  2. CSS3与页面布局学习总结(五)——Web Font与Sprite

    一.web font web font是应用在web中的一种字体技术,在CSS中使用font-face定义新的字体.先了解操作系统中的字体: a).安装好操作系统后,会默认安装一些字体,这些字体文件描 ...

  3. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  4. PHP环境配置

    PHP环境配置 1.Apache的安装 第一步: 1.    双击httpd-2.2.17-win32-x86-no_ssl.msi.出现 Windows 标准的软件安装欢迎界面,直接点“Next”继 ...

  5. JS魔法堂:深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...

  6. [占位-未完成]scikit-learn一般实例之十二:用于RBF核的显式特征映射逼近

    It shows how to use RBFSampler and Nystroem to approximate the feature map of an RBF kernel for clas ...

  7. StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之处,已经有所修改. 今天分 ...

  8. 第四篇 Entity Framework Plus 之 Batch Operations

    用 Entity Framework  进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...

  9. 【原创】C#模拟Post请求,正文为json数据的代码参考

    由于之前一直在做键值对post数据的提交,没遇到过json正文的提交,遇到的问题截图: 对于此种情况的post,我用 谷歌插件 PostMan 模拟试了下成功了,截图如下: Postman插件在你选择 ...

  10. MySQL5.7 error log时间显示问题

    最近有两三套环境升级到了5.7.16,发现mysql.err中的时间好像有些问题,经查是mysql 5.7后的变更,如下: root@localhost [(none)]>select now( ...