Comment enregistrer et réutiliser la même instance de fragments?

J'ai récemment commencé à utiliser des fragments ont créé une démo app qui ressemble à ceci:

Comment enregistrer et réutiliser la même instance de fragments?

En cliquant sur chaque bouton permet de basculer entre le fragment 1, Fragment 2, et le Fragment 3.

Ce que je suis en train d'accomplir est d'avoir seulement 1 instance de chaque Fragment et le réutiliser. (Veuillez noter que tous les fragments sont créés et ajoutés dynamiquement). Actuellement, je fais cela par la création d'une table de hachage de fragment et de placer chaque instance et la saisir à partir de là.

Donc mes questions sont:
Est-il une meilleure manière de faire ceci:
En utilisant FragmentManager de putFragment(...) la méthode? putFragment (Bundle bundle, String key, Fragment fragment) Je ne peux pas comprendre comment l'utiliser dans mon cas. Si quelqu'un peut me donner un exemple d'utilisation de cette méthode.

Est-il coûteux de conserver la référence de chaque fragment dans mon activité? Est-ce à garder tous les fragments de la vie? Je suis douce de référence pour lutter contre cela, mais je ne suis pas sûr si c'est la bonne façon de le faire. Merci de me pointer à l'égard de toute autre manière de faire ceci ou laissez-moi savoir si c'est le meilleur moyen pour y parvenir.

Merci d'avance.

Voici mon code:

Mise à JOUR:
Je suis en train d'essayer de réutiliser des fragments de la pile de retour, en essayant de n'en ajouter d'autres si elle n'existe pas dans la pile de retour. Le code ci-dessous me donne l'Illicite de l'état d'exception après je naviguer loin de fragment de celui -> revenir à elle -> ensuite, essayez d'appuyer sur bouton retour:

10-28 13:21:40.255: ERROR/MessageQueue-JNI(3548): java.lang.IllegalStateException: Fragment already added: FragmentOne{423db570 #0 id=0x7f050006 fragOne}
public class MainActivity extends Activity implements View.OnClickListener {
private Button btnOne;
private Button btnTwo;
private Button btnThree;
/* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initialize();
if(findViewById(R.id.fl) != null){
if(savedInstanceState != null)
return;
}
FragmentManager.enableDebugLogging(true);
updateView("fragOne");
}
private void initialize(){
btnOne = (Button) findViewById(R.id.button1);
btnTwo = (Button) findViewById(R.id.button2);
btnThree = (Button) findViewById(R.id.button3);
btnOne.setOnClickListener(this);
btnTwo.setOnClickListener(this);
btnThree.setOnClickListener(this);
fragHolder = new HashMap<String, SoftReference<Fragment>>();
}
private void updateView(String tag){
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment frag = getFragmentManager().findFragmentByTag(tag);
boolean addToStack = true;
if(frag == null){
if(tag.equals("fragOne"))
frag = new FragmentOne();    
else if(tag.equals("fragTwo"))
frag = new FragmentTwo();
else if(tag.equals("fragThree"))
frag = new FragmentThree();
}else{
//Don't add to back stack
addToStack = false;
}
ft.replace(R.id.fl, frag, tag);
if(addToStack)
ft.addToBackStack(null);
ft.commit();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
updateView("fragOne");
break;
case R.id.button2:
updateView("fragTwo");
break;
case R.id.button3:
updateView("fragThree");
break;
}
}
}

source d'informationauteur Naveed