Multiple instances of one fragment - Tutorial (source code download)


Updated: 23 April 2013

Tested in:
HTC desire S (android 2.3.5), Samsung Galaxy Ace (android 2.3.4), Samsung Galaxy Tab P3100 (android 4.0.4)

Base on:
Eclipse Indigo build in 20120216-1857, Java 1.6, Android 4.1.2

Download Source code:
FragmentMultipleIntances20130423.rar

Description:
Using when one screen or one function must exist multiple times in backstack with different data.

Screen shot:


Tutorial:
Create the code in fragment:
/**
  * Create a new instance of this fragment
  */
 public static MultipleFragment newInstance(int fragmentID) {
  MultipleFragment newFragment = new MultipleFragment();
  Bundle args = new Bundle();
  args.putInt("FragmentID", fragmentID);
  newFragment.setArguments(args);
  return newFragment;
 }
And when click to open a new instance of fragment, using this code below:
public void openNewFragment() {
  Fragment newFragment = null;
  FragmentTransaction ft = mFragmentManager.beginTransaction();
  if (mStack.isEmpty() == true) {
   /**
    * No fragment created, open the first instance with id = 1
    */
   newFragment = MultipleFragment.newInstance(1);
   ft.add(R.id.content, newFragment);
   ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
   ft.show(newFragment);
  } else {
   /**
    * Stack is not empty, open a new instance
   */
   // Hide the last fragment
   ft.hide(mListFragments.get(mStackUniqueID.lastElement()));
   // Show the new fragment
   int newID = mStack.size() + 1;
   newFragment = MultipleFragment.newInstance(newID);
   ft.add(R.id.content, newFragment);
   ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
   ft.show(newFragment);
  }
  // add this new fragment to stack
  if (newFragment != null) {
   mStack.push(newFragment.getClass().getSimpleName());
   String fragmentID = createTimeStamp();
   mListFragments.put(fragmentID, newFragment);
   mStackUniqueID.push(fragmentID);
  }
  ft.commit();
 }

Leave a Reply

Powered by Blogger.