package com.roboo.like.netease; import java.io.IOException; import java.util.LinkedList; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.view.View; import android.widget.ProgressBar; import com.roboo.like.netease.dao.ICityDao; import com.roboo.like.netease.dao.impl.CityDaoImpl; import com.roboo.like.netease.database.DBHelper; import com.roboo.like.netease.fragment.WeatherFragment; import com.roboo.like.netease.model.City; import com.roboo.like.netease.model.Weather; import com.roboo.like.netease.service.WeatherService; import com.roboo.like.netease.utils.JsonUtils; import com.roboo.like.netease.view.MyViewPager; import com.roboo.like.netease.view.MyViewPager.TransitionEffect; public class WeatherActivity extends BaseActivity { private static final int REQUEST_CODE = 2442; private MyViewPager mViewPager; private ProgressBar mProgressBar; private MyPagerAdapter mAdapter; private LinkedList<Weather> mData = new LinkedList<Weather>(); private City mSelectedCity; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ICityDao cityDao = new CityDaoImpl(new DBHelper(this)); mSelectedCity = cityDao.getSelectedCity(); setTVTitle(mSelectedCity.getCityName()+getString(R.string.tv_weather)); showLocationBtn(true); showShareBtn(true); // TODO setContentView Tag setContentView(R.layout.activity_weather); initView(); new WeatherAsyncTask().execute(mSelectedCity.getCityCode()); System.out.println("onCreate"); } /** * TODO initView * */ private void initView() { this.mViewPager = (MyViewPager) findViewById(R.id.mvp_pager); this.mViewPager.setTransitionEffect(TransitionEffect.FlipHorizontal); this.mProgressBar = (ProgressBar) findViewById(R.id.pb_progress); } public class MyPagerAdapter extends FragmentStatePagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment fragment = WeatherFragment.newInstance(mData.get(position)); System.out.println("mData.get("+position+") = "+ mData.get(position)); mViewPager.setObjectForPosition(fragment, position); return fragment; } @Override public int getCount() { return mData.size(); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } } private class WeatherAsyncTask extends AsyncTask<String, Void, LinkedList<Weather>> { protected LinkedList<Weather> doInBackground(String... params) { if (null != params) { String cityCode = params[0]; WeatherService service = new WeatherService(); try { Thread.sleep(2000); return JsonUtils.handleWeatherJson(service.getWeatherJson(cityCode)); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(LinkedList<Weather> result) { mViewPager.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.GONE); super.onPostExecute(result); if (null != result) { mAdapter = new MyPagerAdapter(getSupportFragmentManager()); mData = result; mViewPager.setAdapter(mAdapter); mAdapter.notifyDataSetChanged(); } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ibtn_location: startActivityForResult(new Intent(this, CityListActivity.class), REQUEST_CODE); break; default: super.onClick(v); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { City city = new CityDaoImpl(new DBHelper(this)).getSelectedCity(); if(mSelectedCity != city) { mSelectedCity = city ; setTVTitle(mSelectedCity.getCityName()+getString(R.string.tv_weather)); mProgressBar.setVisibility(View.VISIBLE); mViewPager.setVisibility(View.GONE); new WeatherAsyncTask().execute(mSelectedCity.getCityCode()); } } } }