前面介绍了整个应用的框架,下面接着继续介绍各模块设计的细节。
一.“交通篇”
上面三幅图基本上就是交通版块所包含的内容了,其中,图二、三只涉及 Android 基本的控件 ExpandableListView 的使用,这里不作具体的讲解,我们重点来看图一的实现。
1. 输入框是什么控件?
为了达到提示用户输入的效果,这里不能使用最普遍的 EditText 作为输入框,Android 为我们提供了一个自动展示下拉提示列表的输入控件 "AutoCompleteTextView",在这里使用最好不过了。
2. 控件有了,那么我们需要显示什么数据内容到控件的列表呢?当然是匹配到用户输入地点的上车点的名称集合。
3. 接着上面的疑问,我们下面讲解匹配用户输入地点名称的规则和算法。
- 首先,一个地方,比如“东圃镇”,往往有不同的几个上车地点(如图一所示),考虑到用户输入的时候第一反应是输入一个地名,所以这里的匹配规则是按照地名,如“天河区东圃镇”来进行模糊匹配该地方存在的所有上车点,然后以 Adapter 的形式传递给输入框,展示给用户看。
- 其次,关于模糊匹配的算法实现,学过数据库就知道,有根据一个字符串来模糊查询数据库的命令,关键字是 "where *** like ****":
<span style="font-size:14px;">Cursor mCursor = db.rawQuery("select * from " + tableName + " where " + "stop_name" + " like '%" + shortName + "%' and first=1 " + "or location like '%" + shortName + "%' and first=1 ",null);</span>
那么问题就来了,我需要将查询结果以 Adapter 的形式传递给 "AutoCompleteTextView",但一个普通的 Adapter,要怎么跟查询数据库所返回的 Cursor 来进行关联呢?
Android 给我们提供了一个Adapter类,叫 "SimpleCursorAdapter ",专用于数据绑定,也就是说用它可以跟数据库的 Cursor 进行直接的关联。
4. 上面我们解决了用户从输入地名,到接收到自动提示上下车地点,再到选取需要的地点,这几个问题,那么,用户选取到指定地点后,点击班车搜索,又是如何进行班车路线匹配的呢?
我想,如果仔细看明白了第3点关于数据库模糊匹配的方法后,这个就已然不是问题了,因为模糊匹配都有了,自然也有精确匹配。在此就不赘述了。
5. 关于加入“公交”线路查询的功能,当初也进行了一些思想的挣扎,比较现在绝大多数人的手机都有安装百度地图等查询工具,会不会多次一举?
最后考虑到毕竟有时候用户打开了这个应用,如果突然想搜索公交的线路,此时提供这么个入口,岂不就不用再麻烦的退出,再进入百度地图?万一用户的手机刚好没安装百度地图呢?带着这样的想法,于是就添加了这个功能。
话又说回来,其实“公交”查询的入口,就是调用了百度Map开放平台提供的第三方接口,具体的实现比较简单,有兴趣的朋友可以直接百度一下,也不赘述。
至此,就把“交通篇”的一些技术实现方法简要的介绍完了,其实回过头来看,并不会那么的困难,很多都是一些现成的基本的技术点,只是把他们结合在一起使用罢了。
下一篇,将介绍“美食篇”的内容。