package com.gitonway.fineday.activity; import java.util.ArrayList; import java.util.List; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.App; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Fullscreen; import org.androidannotations.annotations.OnActivityResult; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.res.AnimationRes; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; import android.view.animation.Animation; import android.widget.LinearLayout; import android.widget.ListView; import com.gitonway.fineday.MyApp; import com.gitonway.fineday.R; import com.gitonway.fineday.adapter.MyPagerAdapter; import com.gitonway.fineday.adapter.WeaterAdapter; import com.gitonway.fineday.domain.WeaterLogic; import com.gitonway.fineday.domain.model.CityModel; import com.gitonway.fineday.domain.model.WeaterModel; import com.gitonway.fineday.domain.model.WeaterObjModel; import com.gitonway.fineday.utils.ACache; import com.gitonway.fineday.utils.LogUtils; import com.gitonway.fineday.utils.PreferencesUtils; import com.gitonway.fineday.utils.ToJsonStrUtils; import com.gitonway.fineday.widget.*; import com.gitonway.fineday.widget.crouton.Crouton; import com.gitonway.fineday.widget.crouton.Style; import com.gitonway.fineday.widget.jazzyviewpager.JazzyViewPager; import com.gitonway.fineday.widget.jazzyviewpager.JazzyViewPager.TransitionEffect; import com.umeng.analytics.MobclickAgent; @Fullscreen @EActivity(R.layout.activity_main) public class MainActivity extends BaseActivity implements OnRefreshListener, OnPageChangeListener { @App MyApp app; @ViewById(R.id.main_bg) LinearLayout mMainLayout; /** * 今日天气Viewpage */ @ViewById(R.id.jazzy_pager) JazzyViewPager mViewPager; /** * 天气列表 */ @ViewById(R.id.weater_list) ListView mListViewWeater; /** * 下拉刷新 */ @ViewById(R.id.refresh_container) SwipeRefreshLayout mSwipeRefreshLayout; /** * 淡入动画 */ @AnimationRes Animation fadeIn; /** * 天气列表适配器 */ @Bean WeaterAdapter adapter; @Bean WeaterLogic weaterLogic; /** * viewpager视图集 */ private List<TodayWeaterInfo> views; /** * 当前所有天气信息 */ private List<WeaterModel> currrentlist; /** * 当前所有城市列表 */ private List<CityModel> currrentcitylist; /** * 今日天气信息 */ private TodayWeaterInfo todayWeaterInfo; /** * 当前所选城市ID */ private String currentCityId = "101010100"; /** * 城市个数(上一次的) */ private int numberOfCity; /** * 城市个数(实时的) */ private int length; /** * 当前中页数 */ private int pageindex; /** * 是否首次进去本activity */ private boolean isFirstEnter=true; /** * 是否首次进入程序 */ private boolean isFirst; @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); length = ToJsonStrUtils.getCityListLength(this); if (length == 0) { if (isFirstEnter) { isFirstEnter=false; }else { this.finish(); } } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); MobclickAgent.onPause(this); } @AfterViews void initActivity() { // setBackgroud(TimeUtils.getHour()); //打印UMeng统计测试所需信息 // System.out.println(UMengUtils.getDeviceInfo(this)); isFirst=PreferencesUtils.getBoolean(this, PreferencesUtils.FIRST_ENTER,true); int length = ToJsonStrUtils.getCityListLength(this); if (length == 0) { CitySelectionActivity_.intent(this).startForResult(TodayWeaterInfo.REQUEST_CODE); } else { showProgressDialog(); viewInit(); getWeaterListData(); } if (isFirst) { firstEnter(); } } /** * 加载所选城市列表所有城市 */ @Background void getWeaterListData() { currrentlist = new ArrayList<WeaterModel>(); try { for (int i = 0; i < currrentcitylist.size(); i++) { WeaterModel model = WeaterLogic.Instance().getWeaterList(this, currrentcitylist.get(i).getCityId()); currrentlist.add(model); } } catch (Exception e) { e.printStackTrace(); mSwipeRefreshLayout.setRefreshing(false); } updateList(currrentlist); } /** * 下拉刷新当前显示城市天气信息 * * @param cityid * 当前显示城市ID */ @Background void onRefreshData(String cityid) { WeaterModel model = null; try { model = WeaterLogic.Instance().getWeaterList(this, cityid); } catch (Exception e) { e.printStackTrace(); mSwipeRefreshLayout.setRefreshing(false); } updateSingleList(model); } /** * 更新所有列表 * * @param models * 天气信息集合 */ @UiThread void updateList(List<WeaterModel> models) { dismissProgressDialog(); if (models == null || models.size() == 0) return; WeaterModel model = models.get(0); try { if (model.isOffline()) { showToast(">﹏<网络可能有问题!"); } // 为listview添加淡入动画 // mListViewWeater.startAnimation(fadeIn); List<WeaterObjModel> mList = new ArrayList<WeaterObjModel>(); mList = model.getWeather(); // 初始化头部信息(当天天气信息) viewpagerInit(models); adapter.appendToList(mList); // 将刷新状态标注为false mSwipeRefreshLayout.setRefreshing(false); } catch (Exception e) { e.printStackTrace(); mSwipeRefreshLayout.setRefreshing(false); LogUtils.w("列表更新失败"); } } /** * 更新当前所显示天气信息 * * @param model * 当前天气信息 */ @UiThread void updateSingleList(WeaterModel model) { dismissProgressDialog(); try { if (model.isOffline()) { showToast(">﹏<网络可能有问题!"); } List<WeaterObjModel> mList = new ArrayList<WeaterObjModel>(); mList = model.getWeather(); adapter.appendToList(mList); views.get(pageindex).bind(model); // 将刷新状态标注为false mSwipeRefreshLayout.setRefreshing(false); } catch (Exception e) { e.printStackTrace(); mSwipeRefreshLayout.setRefreshing(false); LogUtils.w("单个列表更新失败"); } } /** * 首次进入 */ private void firstEnter(){ CityModel model=new CityModel(); model.setCityId("101231001"); model.setCityName("钓鱼岛"); ACache.get(this).put(PreferencesUtils.LIST_OF_CITY, ToJsonStrUtils.addCityToJson(null, model)); app.setFirst(isFirst); openActivity(StartActivity_.class); PreferencesUtils.putBoolean(this, PreferencesUtils.FIRST_ENTER, false); } /** * 控件初始化 */ private void viewInit() { List<CityModel> citylist = new ArrayList<CityModel>(); try { citylist = ToJsonStrUtils.getCurrentCity(this); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } currrentcitylist = citylist; numberOfCity = currrentcitylist.size(); if (!currrentcitylist.isEmpty()) { currentCityId = currrentcitylist.get(0).getCityId(); } mSwipeRefreshLayout.setOnRefreshListener(this); mSwipeRefreshLayout.setColorScheme(R.color.comm_1, R.color.comm_2, R.color.list_bg, R.color.top_box); mListViewWeater.setAdapter(adapter); } /** * viewpager初始化 */ private void viewpagerInit(List<WeaterModel> allmodel) { try { views = new ArrayList<TodayWeaterInfo>(); for (int i = 0; i < currrentcitylist.size(); i++) { todayWeaterInfo = TodayWeaterInfo_.build(this); todayWeaterInfo.bind(allmodel.get(i)); views.add(todayWeaterInfo); } mViewPager.setTransitionEffect(TransitionEffect.CubeOut); mViewPager.setOnPageChangeListener(this); mViewPager.setOffscreenPageLimit(1); mViewPager.setAdapter(new MyPagerAdapter(views, mViewPager)); mViewPager.setPageMargin(3); } catch (Exception e) { e.printStackTrace(); LogUtils.w("今日天气情况加载失败"); } } /** * 更具时间设置背景 */ private void setBackgroud(int currentHour) { if (currentHour > 7 && currentHour <= 11) // 早上 mMainLayout.setBackgroundResource(R.drawable.main_bg_1); else if (currentHour > 11 && currentHour <= 13) // 中午 mMainLayout.setBackgroundResource(R.drawable.main_bg_2); else if (currentHour > 13 && currentHour <= 17) // 下午 mMainLayout.setBackgroundResource(R.drawable.main_bg_3); else if (currentHour > 17 && currentHour <= 20) // 傍晚 mMainLayout.setBackgroundResource(R.drawable.main_bg_4); else // 夜晚 mMainLayout.setBackgroundResource(R.drawable.main_bg_5); } /** * 显示ShortToast */ public void showToast(String pMsg) { Crouton.makeText(this, pMsg, Style.ALERT, R.id.toast_conten).show(); } @Override public void onRefresh() { if (mViewPager.getCurrentItem() < 1 || adapter.getData().size() < 1) { getWeaterListData(); } else { onRefreshData(currentCityId); } // showShortToast("刷新成功"); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { try { pageindex = arg0; currentCityId = currrentcitylist.get(arg0).getCityId(); List<WeaterObjModel> mList = currrentlist.get(arg0).getWeather(); mListViewWeater.startAnimation(fadeIn); adapter.appendToList(mList); } catch (Exception e) { e.printStackTrace(); } } @OnActivityResult(TodayWeaterInfo.REQUEST_CODE) void onResult(int resultCode) { //如果城市添加成功或有删除的城市但没有添加,从新加载界面 if (resultCode==1||length!=numberOfCity||isFirst==true) { numberOfCity = length; viewInit(); getWeaterListData(); } } }