@Override
public void onClick(DialogInterface dialog, int which) {
Notification notify = new Notification(); //创建一个Notification对象
notify.icon = imageId[which];
notify.tickerText = title[which];
notify.when = System.currentTimeMillis(); //设置发送时间
notify.defaults = Notification.DEFAULT_SOUND; //设置默认声音
notify.setLatestEventInfo(MainActivity.this, user,
title[which], null); //设置事件信息
notificationManager.notify(NOTIFYID_1, notify); //通过通知管理器发送通知
//让布局中的第一行不显示
((TableRow)findViewById(R.id.tableRow1)).setVisibility(View.INVISIBLE);
//让布局中的第二行不显示
((TableRow)findViewById(R.id.tableRow2)).setVisibility(View.INVISIBLE);
((Button)findViewById(R.id.button1)).setText("更改登录状态"); //改变“登录”按钮上显示的文字
}
});
builder.create().show(); //创建对话框并显示
}
注意: 当用户选择了登录状态列表项后,在显示通知的同时,还需要将布局中的第一行(用于输入用户名)和第二行(用于输入密码)的内容设置为不显示,并且改变“登录”按钮上显示的文字为“更改登录状态”。
(5)在onCreate()方法中,获取“退出”按钮并为其添加单击事件监听器,在重写的onClick()方法中,清除代表登录状态的通知,然后将布局中的第一行和第二行的内容显示出来,并改变“更改登录状态”按钮上显示的文字为“登录”,具体代码如下:
Button button2 = (Button) findViewById(R.id.button2); //获取“退出”按钮
//为“退出”按钮添加单击事件监听器
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
notificationManager.cancel(NOTIFYID_1); //清除通知
((TableRow)findViewById(R.id.tableRow1)).setVisibility(View.VISIBLE); //让布局中的第一行显示
((TableRow)findViewById(R.id.tableRow2)).setVisibility(View.VISIBLE); //让布局中的第二行显示
((Button)findViewById(R.id.button1)).setText("登录"); //改变“更改登录状态”按钮上显示的文字
}
});
运行本实例,将显示一个用户登录界面,输入用户名(bellflower)和密码(111)后,单击“登录”按钮,将弹出如图4.28所示的选择登录状态的列表对话框,单击代表登录状态的列表项,该对话框消失,并在屏幕的右下角显示代表登录状态的通知,过一段时间后该通知消失,同时在状态栏上显示代表登录状态的图标,单击该图标,将显示通知列表,如图4.29所示。单击“退出”按钮,可以删除该通知。
图4.28 选择登录状态的列表对话框
图4.29 在状态栏中显示登录状态
4.4 小 结
本章介绍了用户界面设计中的高级部分,主要分为高级组件和消息提示框与对话框两部分。在高级组件部分,主要介绍了自动完成文本框、进度条、拖动条、星级评分条、选项卡、图像切换器、网格视图和画廊视图等。其中,需要重点掌握的是图像切换器与网格视图和画廊视图的综合应用;在消息提示框与对话框中,主要介绍了如何显示消息提示框、发送并显示通知,以及如何弹出各种对话框。在实际程序开发时,消息提示框和对话框最为常用,需要读者重点掌握,并能做到融会贯通。
4.5 实践与练习
1. 编写Android程序,实现在页面完全载入前,在标题上显示一个圆形进度条,当页面载入后,隐藏该进度条。(答案位置:光盘\TM\sl\4\4.18)
2. 编写Android程序,实现带预览的图片浏览器。(答案位置:光盘\TM\sl\4\4.19)
3. 编写Android程序,应用Alert Dialog实现自定义的登录对话框。(答案位置:光盘\TM\sl\4\4.20)
第5章 基本程序单元Activity
( 教学录像:2小时4分钟)
在前面介绍的实例中已经应用过Activity,不过那些实例中的所有操作都是在一个Activity中进行的,在实际的应用开发中,经常需要包含多个Activity,而且这些Activity之间可以相互跳转或传递数据。本章将对Activity进行详细介绍。
通过阅读本章,您可以:
★ 了解Activity及其生命周期
★ 掌握创建、配置、启动和关闭Activity的方法
★ 掌握如何使用Bundle在Activity之间交换数据
★ 掌握如何调用另一个Activity并返回结果
★ 掌握创建Fragment的方法
★ 掌握在Activity中添加Fragment的两种方法
5.1 Activity概述
教学录像:光盘\TM\lx\5\ Activity概述.exe
Activity的中文意思是活动。在Android中,Activity代表手机屏幕的一屏,或是平板电脑中的一个窗口。它是Android应用的重要组成单元之一,提供了和用户交互的可视化界面。在一个Activity中,可以添加很多组件,这些组件负责具体的功能。
在Android应用中,可以有多个Activity,这些Activity组成了Activity栈(Stack),当前活动的Activity位于栈顶,之前的Activity被压入下面,成为非活动Activity,等待是否可能被恢复为活动状态。在Activity的生命周期中,有如表5.1所示的4个重要状态。
表5.1 Activity的4个重要状态
状 态 描 述
活动状态 当前的Activity,位于Activity栈顶,用户可见,并且可以获得焦点
暂停状态 失去焦点的Activity,仍然可见,但是在内存低的情况下,不能被系统killed(杀死)
停止状态 该Activity被其他Activity所覆盖,不可见,但是它仍然保存所有的状态和信息。当内存低的情况下,它将要被系统killed(杀死)