zoukankan      html  css  js  c++  java
  • 酷乐天气开发记录总结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();
                       }

  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/lemonhome/p/4492644.html
Copyright © 2011-2022 走看看