酷乐天气开发记录总结5
切换城市和手动更新天气
首先在布局文件中加入切换城市和更新天气的按钮,修改weather_layout.xml中的代码:
<Button android:id="@+id/switch_city" android:layout_width="30dp" android:layout_height="30dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:background="@drawable/home" /> <Button android:id="@+id/refresh_weather" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:background="@drawable/refresh" />
修改WeatherActivity中的代码
在 onCreate()方法中获取到了两个按钮的实例,然后分别调用了 setOnClickListener()方法来注册点击事件。当点击的是更新天气按钮时,会首先从 SharedPreferences文件中读取天气代号,然后调用 queryWeatherInfo()方法去更新天气就可以了。当点击的是切换城市按钮
时,会跳转到 ChooseAreaActivity,但是注意目前我们已经选中过了一个城市,如果直接跳
转到 ChooseAreaActivity ,会 立 刻 又 跳 转 回 来 , 因 此 这 里 在 Intent 中 加 入 了 一 个from_weather_activity标志位。
switchCity = (Button)findViewById(R.id.switch_city); refreshWeather= (Button) findViewById(R.id.refresh_weather); switchCity.setOnClickListener(this); refreshWeather.setOnClickListener(this); public void onClick(View v) { switch(v.getId()) { caseR.id.switch_city: Intentintent = new Intent(this, ChooseAreaActivity.class); intent.putExtra("from_weather_activity",true); startActivity(intent); finish(); break; caseR.id.refresh_weather: publishText.setText("同步中..."); SharedPreferencesprefs = PreferenceManager.getDefaultSharedPreferences(this); StringweatherCode = prefs.getString("weather_code", ""); if(!TextUtils.isEmpty(weatherCode)) { queryWeatherInfo(weatherCode); } break; default: break; } }
接着在 ChooseAreaActivity 对这个标志位进行处理,如下所示:
private boolean isFromWeatherActivity; super.onCreate(savedInstanceState); isFromWeatherActivity= getIntent().getBooleanExtra("from_weather_activity", false); SharedPreferencesprefs = PreferenceManager.getDefaultSharedPreferences(this); if(prefs.getBoolean("city_selected", false) &&!isFromWeatherActivity) { Intentintent = new Intent(this, WeatherActivity.class); startActivity(intent); finish(); return; } }
加入了一个 isFromWeatherActivity 变量,以此来标记是不是从WeatherActivity跳转过来的,只有已经选择了城市且不是从 WeatherActivity跳转过来的时候才会直接跳转到 WeatherActivity。另外,我们在 onBackPressed()方法中也进行了处理,当按下 Back键时,如果是从 WeatherActivity跳转过来的,则应该重新回到 WeatherActivity。
public void onBackPressed() { if(currentLevel == LEVEL_COUNTY) { queryCities(); }else if (currentLevel == LEVEL_CITY) { queryProvinces(); }else { if(isFromWeatherActivity) { Intentintent = new Intent(this, WeatherActivity.class); startActivity(intent); } finish(); }