package jianshu.io.app.fragment; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import jianshu.io.app.R; import jianshu.io.app.model.StatePool; /** * A simple {@link android.support.v4.app.Fragment} subclass. * Activities that contain this fragment must implement the * {@link HotPagerFragment.OnFragmentInteractionListener} interface * to handle interaction events. * Use the {@link HotPagerFragment#newInstance} factory method to * create an instance of this fragment. */ public class HotPagerFragment extends Fragment { private static final String WEEKLY_HOT_URL = "http://jianshu.io/top/weekly.html"; private static final String MONTHLY_HOT_URL = "http://jianshu.io/top/monthly.html"; private OnFragmentInteractionListener mListener; private ViewPager mPager; private PagerTabStrip mPagerTabStrip; private PagerAdapter mPagerAdapter; public static HotPagerFragment newInstance() { HotPagerFragment fragment = new HotPagerFragment(); return fragment; } public HotPagerFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.hot_viewpager, container, false); mPager = (ViewPager) view.findViewById(R.id.pager); mPagerAdapter = new ScreenSlidePagerAdapter(getChildFragmentManager()); mPager.setAdapter(mPagerAdapter); mPagerTabStrip = (PagerTabStrip)view.findViewById(R.id.pager_title_strip); mPagerTabStrip.setTabIndicatorColorResource(R.color.card_list_gray); Object[] state = StatePool.getInstance().getState("hotpager"); if(state != null) { mPager.setCurrentItem((Integer)state[0]); } return view; } @Override public void onPause() { super.onPause(); StatePool.getInstance().putState("hotpager", new Object[] {mPager.getCurrentItem()}); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // try { // mListener = (OnFragmentInteractionListener) activity; // } catch (ClassCastException e) { // throw new ClassCastException(activity.toString() // + " must implement OnFragmentInteractionListener"); // } } @Override public void onDetach() { super.onDetach(); mListener = null; } /** * This interface must be implemented by activities that contain this * fragment to allow an interaction in this fragment to be communicated * to the activity and potentially other fragments contained in that * activity. * <p/> * See the Android Training lesson <a href= * "http://developer.android.com/training/basics/fragments/communicating.html" * >Communicating with Other Fragments</a> for more information. */ public interface OnFragmentInteractionListener { // TODO: Update argument type and name public void onFragmentInteraction(Uri uri); } private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter implements CardFragment.HotFragmentListner { private static final int NUM_PAGES = 2; public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { if(position == 0) { return CardFragment.newInstance(WEEKLY_HOT_URL); } else { return CardFragment.newInstance(MONTHLY_HOT_URL); } } @Override public CharSequence getPageTitle(int position) { if(position == 0) { return "七日热门文章"; } else { return "三十日热门文章"; } } @Override public int getCount() { return NUM_PAGES; } @Override public void onRefreshStart() { //mPagerTabStrip.setTabIndicatorColorResource(R.color.card_list_gray); } @Override public void onRefreshEnd() { //mPagerTabStrip.setTabIndicatorColorResource(R.color.jianshu); } } }