2012-10-14 3 views
0

Je souhaite lancer plusieurs fragments dans une activité en fonction de leur nom, où 'i' est un nombre donc ... DummySection1Fragment, DummySection2Fragment, DummySection3Fragment, etc., quel que soit le problème rencontré. et tirer la valeur à travers pour créer l'appel. J'ai inclus l'appel statique de base et celui que j'ai créé moi-même basé sur ce que je sais du monde JavaScript (je parie que c'est mon problème). J'apprécierais n'importe quelle aide (pendant que je me regarde encore) sur la meilleure manière de faire ceci car je suspecte que c'est une méthode potentielle que j'emploierai encore et encore.Mise à jour dynamique d'un appel de fragment

actuel code statique

public Fragment getItem(int i) { 
    Fragment fragment = new DummySectionFragment(); 

Erreur: caractère non valide constant

public Fragment getItem(int i) { 
    Fragment fragment = new 'DummySection' + i + 'Fragment'(); 

complet Code

/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the primary 
* sections of the app. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     Fragment fragment = new DummySectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, i + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 6; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: return getString(R.string.title_section1).toUpperCase(); 
      case 1: return getString(R.string.title_section2).toUpperCase(); 
      case 2: return getString(R.string.title_section3).toUpperCase(); 
      case 3: return getString(R.string.title_section4).toUpperCase(); 
      case 4: return getString(R.string.title_section5).toUpperCase(); 
      case 5: return getString(R.string.title_section6).toUpperCase(); 
     } 
     return null; 
    } 
} 

Répondre

1

Je conseille vivement contre ce comportement app. Que faire si vous souhaitez supprimer le numéro 3 plus tard et avoir les articles 4 à 17? Ou peut-être vous avez besoin d'ajouter un entre # 6 et # 7. C'est beaucoup de renommer (en supposant que vous maintenez l'ordre).

Je suggère de leur donner des noms propres, et de les instancier à la main. Si vous faites cela, vous pouvez les stocker dans un ArrayList<Fragment>, puis renvoyer .get(i).

Si vous êtes absolument 100% déterminé à faire votre méthode à la place, vous devriez être en mesure de le faire comme ceci:

Class clazz = Class.forName("DummySection" + i + "Fragment"); // Use ", not ' 
Fragment frag = (Fragment) clazz.newInstance(); 
+0

Merci pour les pensées Eric .... en cours de lecture avec certains des ADT exemples .... J'ai collé l'adaptateur complet ci-dessus. TBH Je suis tenté de construire à partir du blanc, donc je sais ce qui se passe plutôt que de l'éditer .... –

+0

La façon dont il est déjà configuré, il envoie un argument * à * le 'Fragment' en lui disant quel numéro il est. Ainsi, chacun est le même 'DummySectionFragment', mais se comporte différemment en fonction de l'argument' ARG_SECTION_NUMBER'. – Eric

+0

Oui ... comment l'exemple ne prend que cet argument et imprime le texte à l'écran et change le titre. Prendre un peu de recul si j'ai 6 écrans différents que je prévois - 2 sont RSS, 1 texte et un HTML construisant la logique (if/else etc) car cela semble être le long chemin plutôt que d'appeler des fragments individuels? –