Android教程09 狂风

我们经常需要在安卓应用中包含简易的网页显示功能。我将在这一讲中实现网页的显示。

《狂风》,来自小Willem,荷兰画派黄金时代的作品。作为当时海上马车夫的荷兰,对航海题材的画情有独钟。这种倾斜的船身,是当时的画家常用的手法,用于表现很强的风。

描述

上一讲实现了一个类别条目页面。现在,我希望点击某个类别后,能再次以条目的方式显示所有的联系人。在这个新的条目页面中,点击某个联系人后,能显示该联系人的URL指向的页面。相关的安卓知识点为:

  • Intent和Bundle。传递数据。
  • WebView。用于显示一个网页。

新的数据库查询方法

我将增加一个条目页面,用于显示某个类别下的所有联系人。在数据层面上,我需要从数据库中取出某个类别下的所有联系人。在上一讲中,我创建了ContactsManager类,用于和数据库交互。但之前的CRUD方法无法满足我的需求。我将为该类增加新的方法,以便从数据库中取出 某个类别下的所有联系人 。这个方法如下:

上面方法中查询了数据库的TABLECONTACTS表格。我在数据库的query()方法中规定,在数据库查询时,将只保留符合KEYCATEGORY_ID等于categoryId条件的数据记录。该方法将返回某个categoryId下的所有Contact数据,也就是某个目录下的所有联系人信息。

我将在后面使用这一新增方法。

在Intent放入附加数据

我希望点击类别后,能够进入显示该类别所有联系人,即启动一个新的联系人条目页面。由于类别的数目是动态变化的,我不可能为每个类别创建一个下游页面(而且这样也太麻烦了)。然而,我可以把类别信息传递给同一个下游页面,让该下游页面根据类别,进行不同的处理。这个 数据传递 的任务,将由Intent完成。从 概念漫游(上) 中,我们已经知道,Intent就像传令兵。现在,我要让传令兵夹带一点“私货”了。

putExtra() 方法在Intent中放入一个键值对。"CATEGORY_ID"是“键”,而点击条目对应Category的ID是“值”。

putExtra()方法会先创建一个 Bundle对象,再传递这个Bundle对象。在安卓中,一个Bundle对象即一个键值对。键是一个字符串,值是任意可以打包的对象(parcelableobject)。Bundle在安卓中的用途非常广泛。

我可以用下面的语句,等效的代替上面的putExtra():

即手动创建Bundle对象,再利用putExtra()将Bundle对象附加在Intent对象上。

提取Intent中的附加数据

在下游的Activity中,我可以通过Context的 getIntent()方法来获取Intent对象。下游Activity是新建的ContactListActivity。它将以条目的方式,显示类别下所有联系人:

我在第一部分编写的数据库交互方法getContactsByCategoryId(),在上面的Activity中登场。提取出的Contact表,通过ListView和ContactAdapter,显示为联系人的条目页面。在点击条目后,URL信息放入Intent中,并启动下游的BlogActivity。BlogActivity根据Intent中的URL,来打开联系人的网页。

练习 参考 玛丽莲梦露 ,增加ContactAdapter,activitycategorylist.xml和list_contact.xml,以完整的实现联系人条目页面。

练习 根据之前提到的adb shell,为数据库增加Category和Contact记录。

联系人条目

使用WebView

下面我要添加BlogActivity。它使用了WebView视图元素来显示Web页面。我将增加一个布局文件activity_blog.xml,这个文件包含一个简单的WebView视图元素:

通过操纵该视图元素,我可以把网页加载入这个视图元素。

下面,我将创建对应的BlogActivity。它将从Intent中提取URL地址。WebView的 loadUrl()方法,用于加载URL所指向的网页:

注意上面的 getSettings() 方法将返回一个WebSettings对象,包含了WebView的设置功能。该对象的setJavaScriptEnabled() 方法,将允许WebView运行网页上的JavaScript脚本。

为了WebView正常运行,我需要赋予应用访问互联网的权限,在AndroidManifest.xml中增加 uses-permission 标签:

总结

putExtra(), getIntent(), getIntExtra()

WebView, getSettings(), loadUrl()

「Android教程」系列文章

文/ Vamei

0 Likes