From 8f9877f83da8091a2e77f7166682fc6581783036 Mon Sep 17 00:00:00 2001 From: Liu Tao Date: Wed, 8 Nov 2017 21:59:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8=20choose=20area=20=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=8C=89=E8=BF=94=E5=9B=9E=E6=8C=89=E9=92=AE=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E9=80=90=E7=BA=A7=E8=BF=94=E5=9B=9E=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E7=9B=B4=E6=8E=A5=E9=80=80=E5=87=BA=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/ChooseAreaFragment.java | 21 ++++++++++++++- .../com/coolweather/android/MainActivity.java | 18 ++++++++++++- .../coolweather/android/WeatherActivity.java | 27 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 8 +----- app/src/main/res/layout/activity_weather.xml | 12 ++++----- 5 files changed, 71 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/coolweather/android/ChooseAreaFragment.java b/app/src/main/java/com/coolweather/android/ChooseAreaFragment.java index 1fc1c4f..890de8b 100644 --- a/app/src/main/java/com/coolweather/android/ChooseAreaFragment.java +++ b/app/src/main/java/com/coolweather/android/ChooseAreaFragment.java @@ -4,7 +4,6 @@ import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -272,4 +271,24 @@ private void closeProgressDialog() { } } + /** + * 托管此 fragment 的 activity 可以调用此方法, 以便给此 fragment 一个处理点击返回按钮的机会 + * @return true 表示此 fragment 处理了点击返回按钮的事件, activity 可以不处理了, false 表示 fragment 不处理 + */ + public boolean onBackPressed() { + if (currentLevel == LEVEL_COUNTY) { + currentLevel = LEVEL_CITY; + queryCities(); + } else if (currentLevel == LEVEL_CITY) { + currentLevel = LEVEL_PROVINCE; + queryProvinces(); + } else { + return false; + } + return true; + } + + public int getCurrentLevel() { + return currentLevel; + } } diff --git a/app/src/main/java/com/coolweather/android/MainActivity.java b/app/src/main/java/com/coolweather/android/MainActivity.java index adbf574..aac6489 100644 --- a/app/src/main/java/com/coolweather/android/MainActivity.java +++ b/app/src/main/java/com/coolweather/android/MainActivity.java @@ -3,16 +3,26 @@ import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.support.v7.app.ActionBar; +import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { + ChooseAreaFragment mFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + // 通过代码来托管 fragment + FragmentManager fm = getSupportFragmentManager(); + mFragment = (ChooseAreaFragment) fm.findFragmentById(R.id.fragment_container); + if (mFragment == null) { + mFragment = new ChooseAreaFragment(); + fm.beginTransaction().add(R.id.fragment_container, mFragment).commit(); + } + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if (prefs.getString("weather", null) != null) { Intent intent = new Intent(this, WeatherActivity.class); @@ -21,4 +31,10 @@ protected void onCreate(Bundle savedInstanceState) { } } + @Override + public void onBackPressed() { + if (!mFragment.onBackPressed()) { + super.onBackPressed(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/coolweather/android/WeatherActivity.java b/app/src/main/java/com/coolweather/android/WeatherActivity.java index fe25164..735970a 100644 --- a/app/src/main/java/com/coolweather/android/WeatherActivity.java +++ b/app/src/main/java/com/coolweather/android/WeatherActivity.java @@ -6,6 +6,7 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v4.app.FragmentManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.SwipeRefreshLayout; @@ -66,6 +67,8 @@ public class WeatherActivity extends AppCompatActivity { private String mWeatherId; + private ChooseAreaFragment chooseAreaFragment; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -106,6 +109,15 @@ protected void onCreate(Bundle savedInstanceState) { weatherLayout.setVisibility(View.INVISIBLE); requestWeather(mWeatherId); } + + // 通过代码来托管 fragment + FragmentManager fm = getSupportFragmentManager(); + chooseAreaFragment = (ChooseAreaFragment) fm.findFragmentById(R.id.fragment_container); + if (chooseAreaFragment == null) { + chooseAreaFragment = new ChooseAreaFragment(); + fm.beginTransaction().add(R.id.fragment_container, chooseAreaFragment).commit(); + } + swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { @@ -235,4 +247,19 @@ private void showWeatherInfo(Weather weather) { startService(intent); } + @Override + public void onBackPressed() { + if (drawerLayout.isDrawerOpen(GravityCompat.START)) { + if (chooseAreaFragment.getCurrentLevel() == ChooseAreaFragment.LEVEL_PROVINCE) { + // 在 choose area 时如果是省一级的, 点击返回时关闭 drawer 视图 + drawerLayout.closeDrawers(); + } else { + // 如果是市或者区一级的, 就让 fragment 处理点击返回按钮事件, 即返回更大一级的 choose area 界面 + chooseAreaFragment.onBackPressed(); + } + } else { + // drawer 未显示, 则直接退出 app + super.onBackPressed(); + } + } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f59e44b..b48240c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,13 +1,7 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_weather.xml b/app/src/main/res/layout/activity_weather.xml index 65d8e05..91d47b3 100644 --- a/app/src/main/res/layout/activity_weather.xml +++ b/app/src/main/res/layout/activity_weather.xml @@ -50,13 +50,13 @@ - + android:layout_width="match_parent" + android:layout_height="match_parent"> +