Java tutorial
/* * Copyright 2015 sourcestream GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.sourcestream.movieDB.adapter; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.res.Resources; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.view.ViewGroup; import de.sourcestream.movieDB.R; import de.sourcestream.movieDB.controller.MovieList; /** * The {@link android.support.v4.view.PagerAdapter} used to display pages in this sample. * The individual pages are simple and just display two lines of text. The important section of * this class is the {@link #getPageTitle(int)} method which controls what is displayed in the * {@link de.sourcestream.movieDB.view.SlidingTabLayout}. */ public class MovieSlideAdapter extends FragmentPagerAdapter { private String[] navMenuTitles; private FragmentManager manager; private FragmentTransaction mCurTransaction = null; private Resources res; public MovieSlideAdapter(FragmentManager fm, Resources res) { super(fm); this.manager = fm; navMenuTitles = res.getStringArray(R.array.moviesTabs); this.res = res; } /** * Return the number of views available. */ @Override public int getCount() { return 4; } /** * Return the Fragment associated with a specified position. * * @param position Position within this adapter * @return Unique identifier for the item at position */ @Override public Fragment getItem(int position) { String upcoming = "movie/upcoming"; String nowPlaying = "movie/now_playing"; String popular = "movie/popular"; String topRated = "movie/top_rated"; Bundle args = new Bundle(); switch (position) { case 0: args.putString("currentList", "upcoming"); MovieList upcomingList = new MovieList(); upcomingList.setTitle(res.getString(R.string.moviesTitle)); upcomingList.setArguments(args); upcomingList.setCurrentList(upcoming); return upcomingList; case 1: args.putString("currentList", "nowPlaying"); MovieList nowPlayingList = new MovieList(); nowPlayingList.setTitle(res.getString(R.string.moviesTitle)); nowPlayingList.setArguments(args); nowPlayingList.setCurrentList(nowPlaying); return nowPlayingList; case 2: args.putString("currentList", "popular"); MovieList popularList = new MovieList(); popularList.setTitle(res.getString(R.string.moviesTitle)); popularList.setArguments(args); popularList.setCurrentList(popular); return popularList; case 3: args.putString("currentList", "topRated"); MovieList topRatedList = new MovieList(); topRatedList.setTitle(res.getString(R.string.moviesTitle)); topRatedList.setArguments(args); topRatedList.setCurrentList(topRated); return topRatedList; default: return null; } } /** * This method may be called by the ViewPager to obtain a title string to describe the specified page. * * @param position The position of the title requested * @return A title for the requested page */ @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return navMenuTitles[0]; case 1: return navMenuTitles[1]; case 2: return navMenuTitles[2]; case 3: return navMenuTitles[3]; default: return navMenuTitles[1]; } } /** * @param container - our Viewpager * Fired when we are in Movie or TV details and we pressed back button. * Recreates our fragments. */ public void reAttachFragments(ViewGroup container) { if (mCurTransaction == null) { mCurTransaction = manager.beginTransaction(); } for (int i = 0; i < getCount(); i++) { final long itemId = getItemId(i); // Do we already have this fragment? String name = "android:switcher:" + container.getId() + ":" + itemId; Fragment fragment = manager.findFragmentByTag(name); if (fragment != null) { mCurTransaction.detach(fragment); } } // Add this check for JUnit testing // This try block is added, because JUnit test fails in MainActivityTest.java, setUp() method. // java.lang.IllegalStateException: Recursive entry to executePendingTransactions try { mCurTransaction.commit(); } catch (java.lang.IllegalStateException e) { } mCurTransaction = null; } }