diff --git a/app/build.gradle b/app/build.gradle index 168190d..8f83b13 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.example.owen.weathergo" minSdkVersion 15 targetSdkVersion 24 - versionCode 10 - versionName '1.4.01.3141dev' + versionCode 12 + versionName '1.4.03.3246' testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true /*jackOptions { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f376a51..ddd3001 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,13 +48,11 @@ android:name=".activity.SettingsActivity" android:launchMode="singleTask" /> diff --git a/app/src/main/java/com/example/owen/weathergo/activity/ChoiceCityActivity.java b/app/src/main/java/com/example/owen/weathergo/activity/ChoiceCityActivity.java index 1da8acc..f7ce0bc 100644 --- a/app/src/main/java/com/example/owen/weathergo/activity/ChoiceCityActivity.java +++ b/app/src/main/java/com/example/owen/weathergo/activity/ChoiceCityActivity.java @@ -1,23 +1,26 @@ package com.example.owen.weathergo.activity; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.os.Build; import android.os.Bundle; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.util.Log; import android.view.View; import com.example.owen.weathergo.R; +import com.example.owen.weathergo.common.base.C; +import com.example.owen.weathergo.modules.adapter.CityAdapter; +import com.example.owen.weathergo.modules.domain.City; +import com.example.owen.weathergo.modules.domain.Province; import com.example.owen.weathergo.util.DBManager; import com.example.owen.weathergo.util.SharedPreferenceUtil; import com.example.owen.weathergo.util.WeatherDB; -import com.example.owen.weathergo.modules.domain.City; -import com.example.owen.weathergo.modules.domain.Province; -import com.example.owen.weathergo.modules.adapter.CityAdapter; import java.util.ArrayList; import java.util.List; @@ -40,9 +43,10 @@ public class ChoiceCityActivity extends AppCompatActivity { public static final int LEVEL_PROVINCE = 0; public static final int LEVEL_CITY = 1; - private String what_to_do; + private String what_to_do;//从那个页面过来,多城市管理、主天气页面 + private String which_city; private int currentLevel; -// private boolean isChecked = false; + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) @Override @@ -60,6 +64,9 @@ protected void onStart() { super.onStart(); Intent intent = this.getIntent(); what_to_do = intent.getStringExtra("what_to_do"); + which_city = ("".equals(intent.getStringExtra("which_city")) + || intent.getStringExtra("which_city") == null) + ? C.Tag_CITY_0 : intent.getStringExtra("which_city"); } private void init() { @@ -83,14 +90,12 @@ public void onItemClick(View view, int pos) { } else if (currentLevel == LEVEL_CITY) { selectedCity = cityList.get(pos); if ("select_multi_city".equals(what_to_do)) { - Log.d("ChoiceCityActivityhuang", " onclick " + selectedCity.getCityName()); Intent intent = new Intent(); intent.putExtra("select_multi_city", selectedCity.getCityName()); setResult(RESULT_OK, intent); - } else { - SharedPreferenceUtil.getInstance().setCityName(selectedCity.getCityName()); + } else if (!"".equals(which_city)) { + updateCity(); } -// finish(); quit(); } @@ -104,6 +109,66 @@ private void quit() { overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } + private void updateCity() { + Intent intent = new Intent(); + intent.setClass(ChoiceCityActivity.this, WeatherMain.class); + DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); + final SQLiteDatabase db = DBManager.getInstance().getDatabase(); + Cursor cursor = db.rawQuery("select city from MultiCities", null); + ArrayList cityList = new ArrayList<>(); + if (cursor.moveToFirst()) { + do { + //遍历cursor + String city = cursor.getString(cursor.getColumnIndex("city")); + cityList.add(city); + } while (cursor.moveToNext()); + } + cursor.close(); + ContentValues values = new ContentValues(); + values.put("city", selectedCity.getCityName()); + if (which_city != null) + switch (which_city) { + case C.Tag_CITY_0: + SharedPreferenceUtil.getInstance() + .setCityName(selectedCity.getCityName()); + //城市0 主城市 + intent.putExtra("which_page", 0); + break; + case C.Tag_CITY_1: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(0) + }); + intent.putExtra("which_page", 1); + break; + case C.Tag_CITY_2: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(1) + }); + intent.putExtra("which_page", 2); + break; + case C.Tag_CITY_3: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(2) + }); + intent.putExtra("which_page", 3); + break; + case C.Tag_CITY_4: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(3) + }); + intent.putExtra("which_page", 4); + break; + case C.Tag_CITY_5: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(4) + }); + intent.putExtra("which_page", 5); + break; + default: + } + DBManager.getInstance().closeDatabase(); + startActivity(intent); + } @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) public void queryCities(int ProId) { @@ -126,9 +191,7 @@ public void queryProvince() { DBManager.getInstance().openDatabase(); provincesList.addAll(WeatherDB.loadProvinces(DBManager.getInstance().getDatabase())); DBManager.getInstance().closeDatabase(); - dataList.clear(); - for (Province province : provincesList) { dataList.add(province.getProName()); } @@ -143,7 +206,6 @@ public void queryProvince() { @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) @Override public void onBackPressed() { -// super.onBackPressed(); //重写onBackPressed()方法需要将super.onBackPressed()注释掉,不然无论执行什么都会默认执行这一句而退出 if (currentLevel == LEVEL_PROVINCE) { finish(); diff --git a/app/src/main/java/com/example/owen/weathergo/activity/MultiCitiesManagerActivity.java b/app/src/main/java/com/example/owen/weathergo/activity/MultiCitiesManagerActivity.java index 711bfe2..11d28c0 100644 --- a/app/src/main/java/com/example/owen/weathergo/activity/MultiCitiesManagerActivity.java +++ b/app/src/main/java/com/example/owen/weathergo/activity/MultiCitiesManagerActivity.java @@ -12,7 +12,6 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.util.Log; import android.view.View; import com.example.owen.weathergo.R; @@ -41,7 +40,6 @@ public class MultiCitiesManagerActivity extends AppCompatActivity { private ArrayList cityList = new ArrayList<>(); private MultiCityAdapter mAdapter; private int mCityCount; - private String mResultCity; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -64,7 +62,6 @@ private void init() { setTitle("多城市管理"); DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); final SQLiteDatabase db = DBManager.getInstance().getDatabase(); -// ToastUtil.showShort("" + db); Cursor cursor = db.rawQuery("select city from MultiCities", null); if (cursor.moveToFirst()) { do { @@ -75,11 +72,7 @@ private void init() { } cursor.close(); mCityCount = (int) DBManager.getInstance().allCaseNum("MultiCities"); -// DBManager.getInstance().closeDatabase(); - /*cityList.add("洛阳"); - cityList.add("开封");*/ cityList.add("添加城市"); -// initRecycleView(); DBManager.getInstance().closeDatabase(); } @@ -98,7 +91,6 @@ public void onItemClick(View view, int pos) { dialog.setSelectOnclickListener(new MultiCityAddDialog.onSelectOnclickListener() { @Override public void onSelectClick() { -// ToastUtil.showShort("selectCity"); Intent intent = new Intent(); intent.setClass(MultiCitiesManagerActivity.this, ChoiceCityActivity.class); intent.putExtra("what_to_do", "select_multi_city"); @@ -117,7 +109,6 @@ public void onYesClick() { if (!"".equals(dialog2.mCityEdit.getText().toString())) { for (String city : cityList) { if (city.equals(dialog2.mCityEdit.getText().toString())) { -// ToastUtil.showShort("城市已存在!"); AlertDialog.Builder dialog3 = new AlertDialog.Builder( MultiCitiesManagerActivity.this); dialog3.setMessage("城市已存在😁") @@ -135,6 +126,7 @@ public void onYesClick() { addData = false; } if (addData) { + DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); values.put("city", dialog2.mCityEdit.getText().toString()); final SQLiteDatabase db = DBManager.getInstance().getDatabase(); db.insert("MultiCities", null, values); @@ -145,6 +137,7 @@ public void onYesClick() { } } dialog2.dismiss(); + DBManager.getInstance().closeDatabase(); } }); dialog2.setNoOnclickListener("取消", new CityDialog.onNoOnclickListener() { @@ -167,10 +160,7 @@ public void onNoClick() { } else { Intent intent = new Intent(MultiCitiesManagerActivity.this, WeatherMain.class); intent.putExtra("city_num", pos); - Log.d("MultiCitiesManagerActivityhuang startActivity ", " pos " + pos); startActivity(intent); -// quit(); -// ToastUtil.showShort("dianjil" + cityList.get(pos)); } } @@ -179,7 +169,6 @@ public void onNoClick() { @Override public void onItemLongClick(View view, int pos) { if (pos < mCityCount) { -// ToastUtil.showShort("shanchu" + cityList.get(pos)); toDeleteCity(cityList.get(pos)); } } @@ -199,31 +188,13 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { case 1: if (resultCode == RESULT_OK) { Boolean addData = true; - mResultCity = data.getStringExtra("select_multi_city"); - Log.d("MultiCitiesManagerActivityhuang", " onActivityResult " - + mResultCity); + String mResultCity = data.getStringExtra("select_multi_city"); if (!"".equals(mResultCity) && mResultCity != null) { DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); final ContentValues values = new ContentValues(); final SQLiteDatabase db = DBManager.getInstance().getDatabase(); - - /*Cursor cursor = db.rawQuery("select city from MultiCities", null); - if (cursor.moveToFirst()) { - do { - //遍历cursor - String city = cursor.getString(cursor.getColumnIndex("city")); - if (city.equals(mResultCity)) { - ToastUtil.showShort("已经选择过这个城市啦!"); - addData = false; - break; - } - } while (cursor.moveToNext()); - } - cursor.close();*/ - for (String city : cityList) { if (city.equals(mResultCity)) { -// ToastUtil.showShort("城市已存在!"); AlertDialog.Builder dialog3 = new AlertDialog.Builder( MultiCitiesManagerActivity.this); dialog3.setMessage("城市已存在😁") diff --git a/app/src/main/java/com/example/owen/weathergo/activity/WeatherMain.java b/app/src/main/java/com/example/owen/weathergo/activity/WeatherMain.java index d280ff2..9192cb1 100644 --- a/app/src/main/java/com/example/owen/weathergo/activity/WeatherMain.java +++ b/app/src/main/java/com/example/owen/weathergo/activity/WeatherMain.java @@ -37,9 +37,9 @@ import com.baidu.location.LocationClientOption; import com.example.owen.weathergo.R; import com.example.owen.weathergo.common.DoubleClickExit; +import com.example.owen.weathergo.common.base.C; import com.example.owen.weathergo.dialog.CityDialog; import com.example.owen.weathergo.modules.adapter.HomePagerAdapter; -import com.example.owen.weathergo.modules.domain.Weather; import com.example.owen.weathergo.modules.fragment.MainFragment; import com.example.owen.weathergo.modules.fragment.MultiCityFragment; import com.example.owen.weathergo.util.DBManager; @@ -52,6 +52,7 @@ import butterknife.BindView; import butterknife.ButterKnife; + public class WeatherMain extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @@ -65,9 +66,8 @@ public class WeatherMain extends AppCompatActivity private static final int SEARCH_CITY = 1; private static final int SCREEN_SHOOT = 2; - private static String Tag_CITY_0 = "main_fragment"; - private static String Tag_CITY_1 = "city_1_fragment"; - private static String Tag_CITY_2 = "city_2_fragment "; + private static String mThisPage = C.Tag_CITY_0; + private static int mPageNum; public LocationClient mLocationClient; ArrayList cityList = new ArrayList<>(); @@ -86,7 +86,6 @@ public class WeatherMain extends AppCompatActivity @BindView(R.id.tabLayout) TabLayout mTabLayout; - private ActionBarDrawerToggle mDrawerToggle; private Handler mHandler; private HomePagerAdapter mHomePagerAdapter; @@ -103,55 +102,21 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onRestart() { super.onRestart(); -// mDrawerLayout.closeDrawers(); } @Override protected void onStart() { - - //从多城市管理界面跳转过来,并接收选中的城市编号 -// Intent intent = this.getIntent(); -// if (intent.getExtras().getString("city_num", "-1") != null) { - //如果是从多城市管理页面回来的话,则刷新页面 safeSetTitle(getResources().getString(R.string.app_name)); - //防止刷新后城市顺序混乱出现title错误的额现象 + //防止刷新后城市顺序混乱出现title错误的现象 int cityNum = getIntent().getIntExtra("city_num", -1); - if (cityNum != -1) { - //如果在MultiCitiesManagerActivity中没有返回而是点击了其中一个城市进行跳转 - //就不会出发回调函数; - mHomePagerAdapter = new HomePagerAdapter(getSupportFragmentManager()); - MainFragment mf = new MainFragment(); - mHomePagerAdapter.addTab(mf, SharedPreferenceUtil.getInstance().getCityName()); - cityList.clear(); - DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); - final SQLiteDatabase db = DBManager.getInstance().getDatabase(); - Cursor cursor = db.rawQuery("select city from MultiCities", null); - if (cursor.moveToFirst()) { - do { - //遍历cursor - String city = cursor.getString(cursor.getColumnIndex("city")); - cityList.add(city); - } while (cursor.moveToNext()); - } - cursor.close(); - int mCityCount = (int) DBManager.getInstance().allCaseNum("MultiCities"); - DBManager.getInstance().closeDatabase(); - Log.d("WeatherMainhuang", " onStart count " + mCityCount); - if (mCityCount != 0) { - for (int i = 0; i < mCityCount; i++) { - MultiCityFragment mtf = MultiCityFragment.newInstance(i, cityList.get(i)); - Log.d("WeatherMainhuang", " onStart " + cityList.get(i)); - mHomePagerAdapter.addTab(mtf, cityList.get(i)); - } - } - mViewPager.setAdapter(mHomePagerAdapter); - if (mCityCount != 0) { - mTabLayout.setupWithViewPager(mViewPager, false); - } - Log.d("WeatherMainhuang", "onStart getIntExtra " + cityNum); - } + int pageNum = getIntent().getIntExtra("which_page", -1); + //如果在MultiCitiesManagerActivity中没有返回而是点击了其中一个城市进行跳转就不会触发回调函数; + syncCity(); mViewPager.setCurrentItem(cityNum + 1); + if (pageNum > -1) { + mViewPager.setCurrentItem(pageNum); + } super.onStart();//将super.onStart();移动到刷新操作之后再从多城市管理点击跳转就不崩溃了 } @@ -189,14 +154,36 @@ public void onClick(View v) { mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { + switch (position) { + //通过当前Fragment决定搜索或选择城市时在哪个位置更改 + case 0: + mThisPage = C.Tag_CITY_0; + break; + case 1: + mThisPage = C.Tag_CITY_1; + break; + case 2: + mThisPage = C.Tag_CITY_2; + break; + case 3: + mThisPage = C.Tag_CITY_3; + break; + case 4: + mThisPage = C.Tag_CITY_4; + break; + case 5: + mThisPage = C.Tag_CITY_5; + break; + default: + } String titleStr; - if (position == 0) + if (position == 0) { titleStr = SharedPreferenceUtil.getInstance().getCityName(); - else + } else { titleStr = cityList.get(position - 1); + } + mPageNum = position; safeSetTitle(titleStr); -// ToastUtil.showShort(""+position); -// super.onPageSelected(position); } }); } @@ -215,7 +202,6 @@ public boolean onOptionsItemSelected(MenuItem item) { Message msg = new Message(); msg.what = SCREEN_SHOOT; mHandler.sendMessage(msg); -// startActivity(new Intent(WeatherMain.this,Test.class)); break; default: break; @@ -231,10 +217,13 @@ public void toSearchDialog() { dialog.setYesOnclickListener("确定", new CityDialog.onYesOnclickListener() { @Override public void onYesClick() { - Message msg = new Message(); - msg.obj = dialog.mCityEdit.getText().toString(); - msg.what = SEARCH_CITY; - mHandler.sendMessage(msg); + updateCity(dialog.mCityEdit.getText().toString(), mThisPage); + syncCity(); + mViewPager.setCurrentItem(mPageNum); + if (mThisPage.equals(C.Tag_CITY_0)) { + //在主界面情况下,直接刷新为新城市名 + safeSetTitle(SharedPreferenceUtil.getInstance().getCityName()); + } dialog.dismiss(); } }); @@ -258,62 +247,90 @@ public void onNoClick() { * (2)如果已经3个则弹出框提示已经选择超限制 */ private void toAddDialog() { - /*MultiCityFragment tf = new MultiCityFragment(); - mHomePagerAdapter.addTab(tf, ""); - mHomePagerAdapter.notifyDataSetChanged(); - mDrawerLayout.closeDrawers(); - mViewPager.setCurrentItem(1);*/ -// ToastUtil.showShort("Multi Cities"); - Intent intent = new Intent(); intent.setClass(WeatherMain.this, MultiCitiesManagerActivity.class); startActivityForResult(intent, 2); -// MultiCitiesManagerActivity.launch(this); } + private void syncCity() { + mHomePagerAdapter = new HomePagerAdapter(getSupportFragmentManager()); + MainFragment mf = new MainFragment(); + Log.d("WeatherMainhuang", " syncCity "+mf); + mHomePagerAdapter.addTab(mf, SharedPreferenceUtil.getInstance().getCityName()); + cityList.clear(); + DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); + final SQLiteDatabase db = DBManager.getInstance().getDatabase(); + Cursor cursor = db.rawQuery("select city from MultiCities", null); + if (cursor.moveToFirst()) { + do { + //遍历cursor + String city = cursor.getString(cursor.getColumnIndex("city")); + cityList.add(city); + } while (cursor.moveToNext()); + } + cursor.close(); + int mCityCount = (int) DBManager.getInstance().allCaseNum("MultiCities"); + DBManager.getInstance().closeDatabase(); + if (mCityCount != 0) { + for (int i = 0; i < mCityCount; i++) { + MultiCityFragment mft = MultiCityFragment.newInstance(i, cityList.get(i)); + mHomePagerAdapter.addTab(mft, cityList.get(i)); + } + mTabLayout.setupWithViewPager(mViewPager, false); + } + mViewPager.setAdapter(mHomePagerAdapter); + } + + private void updateCity(String city, String page) { + DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); + final SQLiteDatabase db = DBManager.getInstance().getDatabase(); + Cursor cursor = db.rawQuery("select city from MultiCities", null); + ContentValues values = new ContentValues(); + values.put("city", city); + switch (page) { + case C.Tag_CITY_0: + SharedPreferenceUtil.getInstance() + .setCityName(city); + //城市0 主城市 + break; + case C.Tag_CITY_1: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(0) + }); + break; + case C.Tag_CITY_2: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(1) + }); + break; + case C.Tag_CITY_3: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(2) + }); + break; + case C.Tag_CITY_4: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(3) + }); + break; + case C.Tag_CITY_5: + db.update("MultiCities", values, "city = ?", new String[]{ + cityList.get(4) + }); + break; + default: + } + DBManager.getInstance().closeDatabase(); + } + + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 2: if (resultCode == RESULT_OK) { - mHomePagerAdapter = new HomePagerAdapter(getSupportFragmentManager()); - MainFragment mf = new MainFragment(); - mHomePagerAdapter.addTab(mf, SharedPreferenceUtil.getInstance().getCityName()); -// mViewPager.removeAllViews(); - cityList.clear(); - DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); - final SQLiteDatabase db = DBManager.getInstance().getDatabase(); - Cursor cursor = db.rawQuery("select city from MultiCities", null); - if (cursor.moveToFirst()) { - do { - //遍历cursor - String city = cursor.getString(cursor.getColumnIndex("city")); - cityList.add(city); - } while (cursor.moveToNext()); - } - cursor.close(); - int mCityCount = (int) DBManager.getInstance().allCaseNum("MultiCities"); - DBManager.getInstance().closeDatabase(); - Log.d("WeatherMainhuang", " onActivityResult count " + mCityCount); - if (mCityCount != 0) { - for (int i = 0; i < mCityCount; i++) { -// for (int i = 0; i < 2; i++) { - MultiCityFragment mtf = MultiCityFragment.newInstance(i, cityList.get(i)); - Log.d("WeatherMainhuang", " onActivityResult " + cityList.get(i)); - mHomePagerAdapter.addTab(mtf, cityList.get(i)); -// mHomePagerAdapter.notifyDataSetChanged(); - } - } - /*if (!"".equals(SharedPreferenceUtil.getInstance().getString("city_1", ""))) { - MultiCityFragment tf = new MultiCityFragment(); - mHomePagerAdapter.addTab(tf, ""); - }*/ -// mHomePagerAdapter.notifyDataSetChanged(); - mViewPager.setAdapter(mHomePagerAdapter); - if (mCityCount != 0) { - mTabLayout.setupWithViewPager(mViewPager, false); - } + syncCity(); } break; default: @@ -329,7 +346,6 @@ protected void onDestroy() { if (mLocationClient != null) mLocationClient.stop(); //先判空,否则可能fc - DBManager.getInstance().closeDatabase(); } @@ -342,49 +358,13 @@ public void init() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //使导航栏透明getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } - setSupportActionBar(mToolBar); initDrawer(); initNavigationView(); - mHomePagerAdapter = new HomePagerAdapter(getSupportFragmentManager()); - MainFragment mf = new MainFragment(); - mHomePagerAdapter.addTab(mf, SharedPreferenceUtil.getInstance().getCityName()); - - DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); - final SQLiteDatabase db = DBManager.getInstance().getDatabase(); - Cursor cursor = db.rawQuery("select city from MultiCities", null); - if (cursor.moveToFirst()) { - do { - //遍历cursor - String city = cursor.getString(cursor.getColumnIndex("city")); - cityList.add(city); - } while (cursor.moveToNext()); - } - cursor.close(); - int mCityCount = (int) DBManager.getInstance().allCaseNum("MultiCities"); - DBManager.getInstance().closeDatabase(); - if (mCityCount != 0) { - for (int i = 0; i < mCityCount; i++) { -// for (int i = 0; i < 2; i++) { - MultiCityFragment mtf = MultiCityFragment.newInstance(i, cityList.get(i)); - Log.d("WeatherMainhuang", " init " + cityList.get(i)); - mHomePagerAdapter.addTab(mtf, cityList.get(i)); -// mHomePagerAdapter.notifyDataSetChanged(); - } - } - /*if (!"".equals(SharedPreferenceUtil.getInstance().getString("city_1", ""))) { - MultiCityFragment tf = new MultiCityFragment(); - mHomePagerAdapter.addTab(tf, ""); - }*/ - mViewPager.setAdapter(mHomePagerAdapter); - if (mCityCount != 0) { - mTabLayout.setupWithViewPager(mViewPager, false); - } + syncCity(); String cCity = SharedPreferenceUtil.getInstance().getCityName(); - Log.d("WeatherMainhuang", " init " + cCity); if ("".equals(cCity) || cCity == null)//判断SharedPreference中存储的是否为空,即如果第一次执行程序不会变为空值进行初始赋值 { - Log.d("WeatherMainhuang", " initLocation " + cCity); initLocation(); } } @@ -392,7 +372,6 @@ public void init() { private void initLocation() { mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(new MyLocationListener()); - /*RxPermissions rxPermissions = new RxPermissions(WeatherMain.this); rxPermissions .request(Manifest.permission.ACCESS_FINE_LOCATION) @@ -470,7 +449,7 @@ public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { //初始化抽屉 public void initDrawer() { - mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolBar, R.string.open, R.string.close); + ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolBar, R.string.open, R.string.close); mDrawerToggle.syncState(); //mDrawerLayout.setDrawerListener(mDrawerToggle); //旧版本可能会空指针 @@ -484,7 +463,10 @@ public void initNavigationView() { public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.nav_city: - ChoiceCityActivity.launch(WeatherMain.this); + Intent intent = new Intent(); + intent.setClass(WeatherMain.this, ChoiceCityActivity.class); + intent.putExtra("which_city", mThisPage); + startActivity(intent); break; case R.id.nav_edit_city: toSearchDialog(); diff --git a/app/src/main/java/com/example/owen/weathergo/common/base/C.java b/app/src/main/java/com/example/owen/weathergo/common/base/C.java index dcdabd2..8b1f58e 100644 --- a/app/src/main/java/com/example/owen/weathergo/common/base/C.java +++ b/app/src/main/java/com/example/owen/weathergo/common/base/C.java @@ -11,5 +11,13 @@ public class C { public static final String AUTHOR = "Owen.H"; public static final String HOST = "https://api.heweather.com/x3/"; public static final String ORM_NAME = "cities.db"; - + + public static final String Tag_CITY_0 = "city_0_fragment"; + public static final String Tag_CITY_1 = "city_1_fragment"; + public static final String Tag_CITY_2 = "city_2_fragment"; + public static final String Tag_CITY_3 = "city_3_fragment"; + public static final String Tag_CITY_4 = "city_4_fragment"; + public static final String Tag_CITY_5 = "city_5_fragment"; + + } diff --git a/app/src/main/java/com/example/owen/weathergo/modules/fragment/MainFragment.java b/app/src/main/java/com/example/owen/weathergo/modules/fragment/MainFragment.java index 323d530..41936da 100644 --- a/app/src/main/java/com/example/owen/weathergo/modules/fragment/MainFragment.java +++ b/app/src/main/java/com/example/owen/weathergo/modules/fragment/MainFragment.java @@ -1,6 +1,7 @@ package com.example.owen.weathergo.modules.fragment; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Build; @@ -26,6 +27,7 @@ import com.example.owen.weathergo.R; import com.example.owen.weathergo.activity.WeatherMain; +import com.example.owen.weathergo.common.base.C; import com.example.owen.weathergo.modules.adapter.WeatherAdapter; import com.example.owen.weathergo.modules.domain.Weather; import com.example.owen.weathergo.service.AutoUpdateService; @@ -84,6 +86,7 @@ public void handleMessage(Message msg) { mNoData.setVisibility(View.GONE); refresh(); } + break; case SEARCH_CITY: //Fragment与activity交互http://blog.csdn.net/huangyabin001/article/details/35231753 @@ -130,17 +133,19 @@ public void run() { } }; - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mToastSuccess = 0; - } @Override public void onAttach(Activity activity) { - super.onAttach(activity); mActivity = (WeatherMain) activity; mActivity.setHandler(mHandler); + super.onAttach(activity); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mToastSuccess = 0; + Log.d("MainFragmenthuang"," onCreate"); } //@Nullable 表示定义的字段可以为空. @@ -158,7 +163,6 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, new Thread(new Runnable() { @Override public void run() { - Log.d("MainFragmenthuang ", " onCreateView " + mCityStr); mWeather = JSONUtil.getInstance().getWeather(getActivity(), mCityStr); Message message = new Message(); message.what = UPDATE_WEATHER_DATA; @@ -183,13 +187,11 @@ public void onStart() { //以节省流量和访问次数(因为每次打开app时用户的位置数据是基本不会改变的) super.onStart(); String Ccity = SharedPreferenceUtil.getInstance().getCityName(); - Log.d("MainFragmenthuang ", " onStart " + mCityStr + "\n" + Ccity); if (!"".equals(Ccity) && !Ccity.equals(mCityStr)) { mCityStr = Ccity; new Thread(new Runnable() { @Override public void run() { - Log.d("MainFragmenthuang ", " onStart " + mCityStr); mWeather = JSONUtil.getInstance().getWeather(getActivity(), mCityStr); Message message = new Message(); message.what = UPDATE_WEATHER_DATA; @@ -199,6 +201,11 @@ public void run() { } } + @Override + public void onResume() { + super.onResume(); + } + @Override public void onDestroy() { super.onDestroy(); @@ -216,11 +223,8 @@ public void init() { if (!"".equals(cCity) && cCity != null)//判断SharedPreference中存储的是否为空,即如果第一次执行程序不会变为空值进行初始赋值 { mCityStr = cCity; -// safeSetTitle(mCityStr); - Log.d("MainFragmenthuang ", " init " + mCityStr); } mNoData.setVisibility(View.GONE); - Log.d("MainFragmenthuang ", " init2 " + mCityStr); initRecycleView(); } @@ -303,7 +307,6 @@ public void getWeather() { mRecycleView.setAdapter(mWeatherAdapter = new WeatherAdapter(mWeather)); mGCityStr = mWeather.getBasic().getCity(); if (!mGCityStr.equals("")) { -// safeSetTitle(mGCityStr); } Intent intent = new Intent(getActivity(), AutoUpdateService.class); getActivity().startService(intent); diff --git a/app/src/main/java/com/example/owen/weathergo/modules/fragment/MultiCityFragment.java b/app/src/main/java/com/example/owen/weathergo/modules/fragment/MultiCityFragment.java index 3201c49..2bd267a 100644 --- a/app/src/main/java/com/example/owen/weathergo/modules/fragment/MultiCityFragment.java +++ b/app/src/main/java/com/example/owen/weathergo/modules/fragment/MultiCityFragment.java @@ -1,7 +1,5 @@ package com.example.owen.weathergo.modules.fragment; -import android.app.Activity; -import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; @@ -27,6 +25,7 @@ import com.example.owen.weathergo.R; import com.example.owen.weathergo.activity.WeatherMain; +import com.example.owen.weathergo.common.base.C; import com.example.owen.weathergo.modules.adapter.WeatherAdapter; import com.example.owen.weathergo.modules.domain.Weather; import com.example.owen.weathergo.util.DBManager; @@ -51,12 +50,8 @@ public class MultiCityFragment extends Fragment { private static final int SCREEN_SHOOT = 2; private static final int CHANGE_TEXT = 3; - // private static final int CITY_NUM_0 = 0;//主城市 - private static final int CITY_NUM_1 = 1;//多城市1 - private static final int CITY_NUM_2 = 2;//多城市2 - private static final int CITY_NUM_3 = 3;//多城市3 - private static final int CITY_NUM_4 = 4;//多城市4 - private static final int CITY_NUM_5 = 5;//多城市5 + private static String mThisPage; + @BindView(R.id.no_city_data) TextView mNoCityData; @@ -72,7 +67,6 @@ public class MultiCityFragment extends Fragment { WeatherAdapter mWeatherAdapter; private int mCityNum; private String mCityStr = "";//设置的CityName - private String mGCityStr = "";//从和风天气查询到的城市名称CityName,理论上和设置的一样 private View view; private boolean mIsCreateView = false; private WeatherMain mActivity; @@ -92,65 +86,49 @@ public void handleMessage(Message msg) { refresh(); } break; - case SEARCH_CITY: + + /*case SEARCH_CITY: //Fragment与activity交互http://blog.csdn.net/huangyabin001/article/details/35231753 if (!msg.obj.toString().equals("")) { - mCityStr = msg.obj.toString(); - DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); - final SQLiteDatabase db = DBManager.getInstance().getDatabase(); - Cursor cursor = db.rawQuery("select city from MultiCities", null); - - ArrayList cityList = new ArrayList<>(); - if (cursor.moveToFirst()) { - do { - //遍历cursor - String city = cursor.getString(cursor.getColumnIndex("city")); - cityList.add(city); - } while (cursor.moveToNext()); - } - cursor.close(); - String Ccity = cityList.get(mCityNum); - ContentValues values = new ContentValues(); - values.put("city", mCityStr); - db.update("MultiCities", values, "city = ?", new String[]{ - Ccity - }); + if (mThisPage.equals(msg.getData().getString("which_page"))) { + mCityStr = msg.obj.toString(); + DBManager.getInstance().openDatabase(DBManager.WEATHER_DB_NAME); + final SQLiteDatabase db = DBManager.getInstance().getDatabase(); + Cursor cursor = db.rawQuery("select city from MultiCities", null); - /*switch (mCityNum + 1) { - case CITY_NUM_1: - SharedPreferenceUtil.getInstance().putString("city_1", mCityStr); - break; - case CITY_NUM_2: - SharedPreferenceUtil.getInstance().putString("city_2", mCityStr); - break; - case CITY_NUM_3: - SharedPreferenceUtil.getInstance().putString("city_3", mCityStr); - break; - case CITY_NUM_4: - SharedPreferenceUtil.getInstance().putString("city_4", mCityStr); - break; - case CITY_NUM_5: - SharedPreferenceUtil.getInstance().putString("city_5", mCityStr); - break; - }*/ -// SharedPreferenceUtil.getInstance().putString("city_1", mCityStr); - new Thread(new Runnable() { - @Override - public void run() { - mWeather = JSONUtil.getInstance().getWeather(getActivity(), mCityStr, mCityNum + 1); - Message message = new Message(); - message.what = UPDATE_WEATHER_DATA; - mHandler.sendMessage(message); + ArrayList cityList = new ArrayList<>(); + if (cursor.moveToFirst()) { + do { + //遍历cursor + String city = cursor.getString(cursor.getColumnIndex("city")); + cityList.add(city); + } while (cursor.moveToNext()); } - }).start(); - } else { - Message message = new Message(); - message.what = CHANGE_TEXT; - message.obj = "no_city_data"; - mHandler.sendMessage(message); - //请手动选择城市 + cursor.close(); + String Ccity = cityList.get(mCityNum); + ContentValues values = new ContentValues(); + values.put("city", mCityStr); + db.update("MultiCities", values, "city = ?", new String[]{ + Ccity + }); + new Thread(new Runnable() { + @Override + public void run() { + mWeather = JSONUtil.getInstance().getWeather(getActivity(), mCityStr, mCityNum + 1); + Message message = new Message(); + message.what = UPDATE_WEATHER_DATA; + mHandler.sendMessage(message); + } + }).start(); + } else { + Message message = new Message(); + message.what = CHANGE_TEXT; + message.obj = "no_city_data"; + mHandler.sendMessage(message); + //请手动选择城市 + } } - break; + break;*/ case SCREEN_SHOOT: /** * 动态获取权限,Android 6.0 新特性,一些保护权限,除了要在AndroidManifest中声明权限,还要使用如下代码动态获取 @@ -191,16 +169,29 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Bundle args = getArguments(); if (args != null) { this.mCityNum = args.getInt("city_num"); + Log.d("MultiCityFragmenthuang", " onCreate mCityNum " + mCityNum); this.mCityStr = args.getString("city_str"); + Log.d("MultiCityFragmenthuang", " onCreate mCityStr " + mCityStr); + } + switch (mCityNum) { + //通过当前Fragment决定搜索或选择城市时在哪个位置更改 + case 0: + mThisPage = C.Tag_CITY_1; + break; + case 1: + mThisPage = C.Tag_CITY_2; + break; + case 2: + mThisPage = C.Tag_CITY_3; + break; + case 3: + mThisPage = C.Tag_CITY_4; + break; + case 4: + mThisPage = C.Tag_CITY_5; + break; + default: } - Log.d("MultiCityFragmenthuang", " onCreate " + mCityStr + " " + mCityNum); - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - mActivity = (WeatherMain) activity; - mActivity.setHandler(mHandler); } //@Nullable 表示定义的字段可以为空. @@ -256,25 +247,6 @@ public void onStart() { } cursor.close(); String Ccity = cityList.get(mCityNum); - Log.d("MultiCityFragmenthuang", " onStart " + Ccity + " " + mCityNum); - /*switch (mCityNum + 1) { - case CITY_NUM_1: - Ccity = SharedPreferenceUtil.getInstance().getString("city_1", ""); - break; - case CITY_NUM_2: - Ccity = SharedPreferenceUtil.getInstance().getString("city_2", ""); - break; - case CITY_NUM_3: - Ccity = SharedPreferenceUtil.getInstance().getString("city_3", ""); - break; - case CITY_NUM_4: - Ccity = SharedPreferenceUtil.getInstance().getString("city_4", ""); - break; - case CITY_NUM_5: - Ccity = SharedPreferenceUtil.getInstance().getString("city_5", ""); - break; - }*/ -// String Ccity = SharedPreferenceUtil.getInstance().getString("city_1", ""); if (!"".equals(Ccity) && !Ccity.equals(mCityStr)) { mCityStr = Ccity; new Thread(new Runnable() { @@ -292,8 +264,6 @@ public void run() { @Override public void onDestroy() { super.onDestroy(); - /*Intent intent = new Intent(getActivity(), AutoUpdateService.class); - getActivity().stopService(intent);*/ DBManager.getInstance().closeDatabase(); } @@ -316,30 +286,9 @@ public void init() { } cursor.close(); String cCity = cityList.get(mCityNum); - Log.d("MultiCityFragmenthuang", " init " + cCity + " " + mCityNum); -// String cCity = ""; - /*switch (mCityNum + 1) { - case CITY_NUM_1: - cCity = SharedPreferenceUtil.getInstance().getString("city_1", ""); - break; - case CITY_NUM_2: - cCity = SharedPreferenceUtil.getInstance().getString("city_2", ""); - break; - case CITY_NUM_3: - cCity = SharedPreferenceUtil.getInstance().getString("city_3", ""); - break; - case CITY_NUM_4: - cCity = SharedPreferenceUtil.getInstance().getString("city_4", ""); - break; - case CITY_NUM_5: - cCity = SharedPreferenceUtil.getInstance().getString("city_5", ""); - break; - }*/ -// String cCity = SharedPreferenceUtil.getInstance().getString("city_1", ""); if (!"".equals(cCity) && cCity != null)//判断SharedPreference中存储的是否为空,即如果第一次执行程序不会变为空值进行初始赋值 { mCityStr = cCity; -// safeSetTitle(mCityStr); } mNoData.setVisibility(View.GONE); @@ -366,26 +315,6 @@ public void onClick(View v) { } cursor.close(); String cCity = cityList.get(mCityNum); - Log.d("MultiCityFragmenthuang", " setListener " + cCity + " " + mCityNum); -// String cCity = ""; - /*switch (mCityNum + 1) { - case CITY_NUM_1: - cCity = SharedPreferenceUtil.getInstance().getString("city_1", ""); - break; - case CITY_NUM_2: - cCity = SharedPreferenceUtil.getInstance().getString("city_2", ""); - break; - case CITY_NUM_3: - cCity = SharedPreferenceUtil.getInstance().getString("city_3", ""); - break; - case CITY_NUM_4: - cCity = SharedPreferenceUtil.getInstance().getString("city_4", ""); - break; - case CITY_NUM_5: - cCity = SharedPreferenceUtil.getInstance().getString("city_5", ""); - break; - }*/ -// String Ccity = SharedPreferenceUtil.getInstance().getString("city_1", ""); if (!cCity.equals(mCityStr)) { mCityStr = cCity; new Thread(new Runnable() { @@ -452,19 +381,12 @@ public void getWeather() { mWeather = JSONUtil.getInstance().getWeather(getActivity(), mCityStr, mCityNum + 1); int i = 0; mRecycleView.setAdapter(mWeatherAdapter = new WeatherAdapter(mWeather)); - mGCityStr = mWeather.getBasic().getCity(); - if (!mGCityStr.equals("")) { -// safeSetTitle(mGCityStr); - } - /*Intent intent = new Intent(getActivity(), AutoUpdateService.class); - getActivity().startService(intent);*/ + String mGCityStr = mWeather.getBasic().getCity(); } catch (Exception e) { e.printStackTrace(); mWeatherInfo.setVisibility(View.GONE); mNoData.setVisibility(View.VISIBLE); -// Toast.makeText(getActivity(), " 定位失败,请手动输入城市", Toast.LENGTH_LONG).show(); } -// Toast.makeText(getActivity(), "加载完毕,✺◟(∗❛ัᴗ❛ั∗)◞✺,", Toast.LENGTH_SHORT).show(); } public void safeSetTitle(String title) { diff --git a/app/src/main/java/com/example/owen/weathergo/util/DBManager.java b/app/src/main/java/com/example/owen/weathergo/util/DBManager.java index 5d7c915..7907547 100644 --- a/app/src/main/java/com/example/owen/weathergo/util/DBManager.java +++ b/app/src/main/java/com/example/owen/weathergo/util/DBManager.java @@ -7,7 +7,6 @@ import android.os.Environment; import android.support.annotation.Nullable; import android.util.Log; -import android.widget.Toast; import com.example.owen.weathergo.R; import com.example.owen.weathergo.common.base.BaseApplication; @@ -87,11 +86,10 @@ public SQLiteDatabase openDatabase(String dbfile) { "city text)" , dbfile, null, 1); dpHelper.getWritableDatabase(); - Toast.makeText(BaseApplication.getAppContext(), "Create DataBase Successful", Toast.LENGTH_SHORT) - .show(); } } - this.database = SQLiteDatabase.openOrCreateDatabase(DB_PATH + "/" + dbfile, null);; + this.database = SQLiteDatabase.openOrCreateDatabase(DB_PATH + "/" + dbfile, null); + ; //非CITY_DB情况下赋值database return SQLiteDatabase.openOrCreateDatabase(DB_PATH + "/" + dbfile, null); } catch (FileNotFoundException e) {