酷乐天气开发记录总结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();
                   }

原文地址:https://www.cnblogs.com/lemonhome/p/4492644.html