package what.whatandroid.top10; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.astuetz.PagerSlidingTabStrip; import api.soup.MySoup; import api.top.TopTorrents; import what.whatandroid.R; import what.whatandroid.callbacks.OnLoggedInCallback; /** * Fragment responsible for loading the top 10 torrent data * and displaying a view pager containing fragments displaying * lists of the torrents for each category */ public class Top10Fragment extends Fragment implements OnLoggedInCallback, LoaderManager.LoaderCallbacks<TopTorrents> { private static final String VIEW_PAGER_STATE = "what.whatandroid.top10.top10fragment.VIEW_PAGER_STATE"; /** * Adapter displaying the categories of the top 10 torrent lists */ private Top10PagerAdapter pagerAdapter; private PagerSlidingTabStrip tabs; private ViewPager viewPager; /** * Since we're setting the number of items in the view pager * based on the data loaded we need to restore the selected * page after setting the data up when coming back from an * orientation change */ private Parcelable viewPagerState; public Top10Fragment(){ //Required empty ctor } @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); if (savedInstanceState != null){ viewPagerState = savedInstanceState.getParcelable(VIEW_PAGER_STATE); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_view_pager_tabs, container, false); viewPager = (ViewPager)view.findViewById(R.id.pager); tabs = (PagerSlidingTabStrip)view.findViewById(R.id.tabs); pagerAdapter = new Top10PagerAdapter(getChildFragmentManager()); viewPager.setAdapter(pagerAdapter); tabs.setViewPager(viewPager); if (MySoup.isLoggedIn()){ getLoaderManager().initLoader(0, null, this); } return view; } @Override public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); outState.putParcelable(VIEW_PAGER_STATE, viewPager.onSaveInstanceState()); } @Override public void onLoggedIn(){ if (isAdded()){ getLoaderManager().initLoader(0, null, this); } } @Override public Loader<TopTorrents> onCreateLoader(int id, Bundle args){ return new Top10AsyncLoader(getActivity()); } @Override public void onLoadFinished(Loader<TopTorrents> loader, TopTorrents data){ if (data == null || !data.getStatus()){ Toast.makeText(getActivity(), "Could not load top torrents", Toast.LENGTH_LONG).show(); } else { pagerAdapter.onLoadingComplete(data); tabs.notifyDataSetChanged(); if (viewPagerState != null){ viewPager.onRestoreInstanceState(viewPagerState); } } } @Override public void onLoaderReset(Loader<TopTorrents> loader){ } }