上一篇:Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示
在上一篇文章中完成了管理城市的部分功能,添加城市的功能还没有实现,本篇文章中将做添加城市部分功能,我们在选择城市的时候,通常会选择一些比较热门的城市,例如北上广深之类的,那么我们添加城市的时候也可以从热门城市中去添加。
首先我们需要一些推荐城市数据,可以定义一个数组,在Constant中新增如下代码:
这是一个数组常量,后面添加城市的时候可以从这里面选。
现在数据有了,创建列表item布局,下面在layout下新建一个item_recommend_city.xml,里面的代码如下:
这里就是一个TextView,我们通过布局管理器变成一行三个,后面会看到,现在item的布局有了,下面写适配器。在adapter包下新建一个RecommendCityAdapter 类,代码如下所示:
我的想法是在点击添加城市按钮时,出现一个底部弹窗,这个弹窗中显示推荐城市数据列表,这样就不用多写一个Activity了,下面我们创建弹窗的布局,在layout下新建一个dialog_add_city.xml,代码如下所示:
下面utils包下创建一个添加城市弹窗的AddCityDialog类,代码如下所示:
这个弹窗的代码还是很简单的,又不同于之前的代码,看看怎么使用。
修改一下ManageCityActivity的initView()方法中的添加城市按钮点击监听代码,如下所示:
之前是点击之后就提示添加城市,现在点击之后显示一个弹窗,然后在弹窗中选择了城市之后,会提示选择的城市是什么,运行看一下:
现在虽然可以显示数据,可以提示点击的城市了,但是并没有去搜索城市添加,同时也没有添加到我的城市数据库中,所以,下面要做的就是完成这两个操作。
还记得之前保存城市数据是在哪里吗?在主页面定位返回中,所以如果当前页面要保存城市数据,则页面对应的ViewModel需要先有方法才行,在ManageCityViewModel中添加如下方法代码:
然后回到之前的点击按钮方法中,修改代码如下所示:
这里就在点击的时候调用了保存到数据库的方法,那么搜索天气只需要再后面再加上几行代码即可。
你会发现这里新增的代码和之前类似,只不过值一样,如下图所示:
然后刚才的两个地方就调用即可,如下图所示:
运行看一下:
欢迎 Star 和 Fork
第十五篇文章源码地址: GoodWeather-New-15
看这篇文章之前,你是否是一路看过来的呢?如果你单独看着一篇的话,有些内容你可能看不懂,所以我建议你一篇一篇的看,这是第十五篇文章了,前面还有十四篇,建议先了解一下,传送门:
天气APP-专栏
在我思虑良久之后决定加一个城市的搜索功能,反正有现成的API,不用白不用,我白嫖侠是不放过任何一个可以白嫖的机会。
城市搜索,我是打算新建一个Activity来专门做这个功能,继续在原来的MainActivity中写的话,就太麻烦了,可能自己看着也会觉得太多代码了,不爽,至于新开启一个页面写的话,就会有两个页面的数据交互方面的问题,这也是本文中的重点讲解对象,至于搜索的那些,都是可以轻松实现的,你说呢?闲话少说,言归正传,这自然又需要一个新的API接口了。
然后是创建一个接收返回数据的实体bean,SearchCityResponse
代码如下:
记住要用自己的key
布局代码如下:
适配器写完了,下面写搜索页面的布局已经做数据渲染显示出来。
搜索页面也是有两个图标的
shape_gray_bg_14.xml 修改顶部布局的背景样式
这个输入框我这里有必要讲解一些
**android:imeOptions=“actionSearch”**就是将软键盘的回车改为搜索,这样可以增加用户的体验
接下来是SearchCityActivity.java页面代码的编写
先绑定布局文件中的控件
然后定义
initData
getLayoutId
createPresent
getSearchCityResult
getDataFailed
初始化列表
初始化输入框
textWatcher
点击事件
你可以将原来的onCreate()方法给删掉了。然后将我粘贴出来的代码复制进去就OK了,轻松愉快。
改动build.gradle记得Sync一下
其实这个EventBus和广播差不多,不过也有区别,它的用法是,在哪个页面接收消息,就在哪个页面绑定和解绑消息。
下面来运用一下,首先是在项目包下创建一个eventbus包,包下创建一个SearchCityEvent的消息类
然后就是使用了,发送消息方,我们在SearchCityActivity中的item点击的时候发送消息
首先使我们点击输入框的时候出现上一次输入的文字,可以设置一个默认的值,比如深圳有两个方法,一个是初始化数据,另一个是保存输入到的数据,
首先创建item的布局
item_tv_history.xml
也比较简单,就一个TextView
然后就会业务代码了,代码如下
RecordsDao
RecordSQLiteOpenHelper
TagAdapter
TagFlowLayout
TagView
现在创建布局和样式
shape_gray_bg_16.xml
tv_history.xml
布局有了,下面就是写代码了,
然后就是在SearchCity中使用了
首先绑定视图
然后编写代码
这里面还有一个提示弹窗
当然还有点击事件也要修改
这个点击事件的代码你可以把原来的点击事件直接覆盖掉,
为了不造成误会,我再粘贴一下SearchCityActivity的代码
源码地址:GoodWeather
欢迎 Star 和 Fork