public class BloggerAppFragment extends Fragment { // Constants private static final String TAG = "BloggerAppFragment"; private static final String ID = "id"; // Member variables @InjectView(R.id.viewpager) ViewPager mViewPager; @InjectView(R.id.tab_layout) TabLayout mTabLayout; @InjectView(R.id.blogger_followers_textview) TextView mFollowers; @InjectView(R.id.blogger_imageview) RoundedImageView mBloggerImage; @InjectView(R.id.blogger_name_textview) TextView mBloggerName; @InjectView(R.id.blogger_description_textview) TextView mBloggerDescription; @InjectView(R.id.fab_create_outfit) FloatingActionButton mFabCreateOutfit; private View mView; private ListFragmentPagerAdapter mAdapter; private String mBloggerId; private Blogger mBlogger; private boolean mIsLoading = false; private IdFilterConfiguration mBloggerFilter; private BloggerLoader mBloggerLoader; // Callbacks final private LoaderCallback mCallbackBlogger = new LoaderCallback() { @Override public void onItemsLoaded(BloggerResponse bloggerResponse, LoaderDirection resultFor) { mIsLoading = false; mBlogger = bloggerResponse.blogger; int followers = mBlogger.getFollowers(); mFollowers.setText(followers > 1 ? followers + " " + getString(R.string.followers) : followers + " " + getString(R.string.follower)); ImageUtils.loadImage(mBlogger.getImage(), mBloggerImage, ImageUtils.ImageWidth.THUMBNAIL_100x100); mBloggerName.setText(mBlogger.getName()); mBloggerDescription.setText(mBlogger.getDescription()); } }; // Constructors public BloggerAppFragment() { // Required empty public constructor } // Factory methods public static BloggerAppFragment newInstance(String id) { BloggerAppFragment fragment = new BloggerAppFragment(); Bundle args = new Bundle(); args.putString(ID, id); fragment.setArguments(args); return fragment; } // Lifecycle methods @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mBloggerId = getArguments().getString(ID); mBloggerFilter = new IdFilterConfiguration(mBloggerId); } mBloggerLoader = new BloggerLoader(mCallbackBlogger); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.fragment_blogger_app, container, false); setHasOptionsMenu(true); return mView; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.inject(this, view); mFabCreateOutfit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "This is going to start the flow to create an outfit", Toast.LENGTH_SHORT).show(); } }); mAdapter = new ListFragmentPagerAdapter(getFragmentManager()); mAdapter.addFragment(OutfitListFragment.newInstance(BloggerAppOutfitResponse.Type.DRAFT), "DRAFT"); mAdapter.addFragment(OutfitListFragment.newInstance(BloggerAppOutfitResponse.Type.READY), "READY"); mAdapter.addFragment(OutfitListFragment.newInstance(BloggerAppOutfitResponse.Type.LIVE), "LIVE"); mAdapter.addFragment(OutfitListFragment.newInstance(BloggerAppOutfitResponse.Type.ON_HOLD), "ON HOLD"); mViewPager.setAdapter(mAdapter); mTabLayout.setupWithViewPager(mViewPager); loadBlogger(); } // Helper methods private void loadBlogger() { mIsLoading = true; mBloggerLoader.reloadItems(mBloggerFilter); } // Inner classes class ListFragmentPagerAdapter extends FragmentStatePagerAdapter { private final List mFragmentList = new ArrayList<>(); private final List mFragmentTitleList = new ArrayList<>(); public ListFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } } }