本篇主要介绍的内容有两个
一、切换城市
二、刷新天气
先来介绍刷新天气
在上一篇中,我们在显示天气的activity里初始化了一些控件,里面包括2个按钮,其中之一就是刷新天气。然后我们去设置它的点击事件。
<span style="font-family:Microsoft YaHei;font-size:18px;">refreshWeather.setOnClickListener(this);</span>
<span style="font-family:Microsoft YaHei;font-size:18px;"> @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.switch_city:
...
break;
case R.id.refresh_weather:
publishText.setText("同步ing...");
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(this);
String weatherCode = sp.getString("weather_code", "");
if (!TextUtils.isEmpty(weatherCode)) {
queryWeatherInfo(weatherCode);
}
break;
default:
break;
}
}</span>
主要就是通过SharedPreferences获取天气代码,然后去查询天气,逻辑很简单。
接下来,我们来介绍一下如何切换城市。
同样的,初始化控件,然后设置其点击事件。
<span style="font-family:Microsoft YaHei;font-size:18px;"> @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.switch_city:
Intent intent = new Intent(this, ChooseAreaActivity.class);
intent.putExtra("from_weather_activity", true);
startActivity(intent);
finish();
break;
case R.id.refresh_weather:
...
break;
default:
break;
}
}</span>
主要是通过意图跳转,并且设置了一个标志位:from_weather_activity。
然后就去是ChooseAreaActivity里去通过意图来获取标志位,然后再进行一系列的操作。
<span style="font-family:Microsoft YaHei;font-size:18px;">isFromWeatherActivity = getIntent().getBooleanExtra("from_weather_activity", false);</span>
<span style="font-family:Microsoft YaHei;font-size:18px;">if (sp.getBoolean("city_selected", false) && !isFromWeatherActivity) {
Intent intent = new Intent(this, WeatherActivity.class);
startActivity(intent);
finish();
return;
}</span>
如果已经选择过了城市,并且还不是从WeatherActivity界面跳转过来的,那么就去直接显示天气。
否则,顺序执行以后的代码,也就是去本地数据库中查询所有的省市县,这样也就完成了重新选择城市的问题。
来看看运行结果。
自此,全部程序就完成啦。
程序已经托付github : https://github.com/guya1990/MyCoolWeather.git
注:本程序来自于郭神的《第一行代码》,文章之所以标志为原创是主要是以下原因:
1、经过了郭神的许可
2、所有代码和图都是我经过理解且重新敲进去的。
最后感谢郭神,我觉得郭神的《第一行代码》用来知识点扫盲挺好的,里面有很多小技巧,详细的程序内容大家可以去买一本看看,这里只是我自己重新实现了一下。