package org.smartpaws.viewpager; 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.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.smartpaws.MainActivity; import org.smartpaws.R; import org.smartpaws.fragments.ErrorOfflineFragment; import org.smartpaws.fragments.GohFragment; import org.smartpaws.net.DataMan; import org.smartpaws.net.ParallelResponseHandler; import org.smartpaws.net.ResponseHandler; import org.smartpaws.objects.Convention; import org.smartpaws.objects.GuestOfHonor; import org.smartpaws.util.ScreenDensity; public class GohViewPager extends Fragment { private static final int IMAGE_COUNT_PER_FRAGMENT = 2; private volatile int fetchedCount; @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final int containerId = getArguments().getInt("container_id"); final View loading = inflater.inflate(R.layout.frag_loading, container, false); DataMan.getConvention("confuzzled", new ResponseHandler<Convention>() { @Override public void result(Convention result) { if (result == null) { MainActivity.INSTANCE.getSupportFragmentManager() .beginTransaction() .replace(containerId, new ErrorOfflineFragment()) .commit(); return; } final GuestOfHonor[] gohs = result.getGuestsOfHonor(); showFragment(containerId, gohs); } }); return loading; } private synchronized boolean pollAllFetched(int gohCount) { fetchedCount++; return fetchedCount == (IMAGE_COUNT_PER_FRAGMENT * gohCount); } private void showFragment(int containerId, GuestOfHonor[] gohs) { final Fragment fragment = new GohViewPagerFragment(); final Bundle bundle = new Bundle(); bundle.putSerializable("gohs", gohs); fragment.setArguments(bundle); MainActivity.INSTANCE.getSupportFragmentManager() .beginTransaction() .replace(containerId, fragment) .commit(); } public static class GohViewPagerFragment extends Fragment { private ViewPager mPager; private PagerAdapter mPagerAdapter; private GuestOfHonor[] gohs; @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.gohs = (GuestOfHonor[]) getArguments().getSerializable("gohs"); View root = inflater.inflate(R.layout.view_pager, null); mPagerAdapter = new GohViewPagerAdapter(MainActivity.INSTANCE.getSupportFragmentManager()); mPager = (ViewPager) root.findViewById(R.id.pager); mPager.setAdapter(mPagerAdapter); return root; } private GohFragment createFragment(GuestOfHonor goh) { GohFragment fragment = new GohFragment(); Bundle bundle = new Bundle(); bundle.putSerializable("goh", goh); fragment.setArguments(bundle); return fragment; } private class GohViewPagerAdapter extends FragmentStatePagerAdapter { public GohViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int pos) { return createFragment(gohs[pos]); } @Override public int getCount() { return gohs.length; } } } }