2016-07-14 15 views
2

Ich habe ein (vor geschriebenes) Fragment, das unter R.layout.myFragment aufgerufen wird. Da ich ein Fragment (auch im vordefinierten Code) an einen FragmentPagerAdapter in einem ViewPager übergeben muss, habe ich versucht, es als zu übergeben, aber es gab null zurück, wahrscheinlich, da es etwas in der Form R.id.something erwartet.
Ich fand hier einige Antworten auf SO - bezogen auf die Implementierung von Google Maps - Fragmenten - aber diese (glaube ich) gelten nicht für mein Problem, da ich ein Fragment in Form von R.layout.myFragment verwenden muss und keine Parent/Container - Fragmente (oder etwas ähnliches, soweit ich weiß), um eine FragmentTransaction zu verwenden.
Es wird erwartet, dass das Fragment in der Überlagerung getItem() des FragmentPagerAdapter von ViewPager zurückgegeben wird. Wie kann ich dieses Fragment erhalten, um es zurückzugeben?Wie kann ich dieses Fragment zurückgeben?

+0

Wo ist der Code, Hast du müde? – Nambi

+0

Bitte denken Sie daran, eine Antwort zu akzeptieren, wenn es Ihnen geholfen hat – SoroushA

Antwort

0

Es gibt zwei mögliche Lösungen. Beides beinhaltet das Durchlaufen aller Fragmente, um das zu finden, was Sie brauchen.

Wie erklärt here von didi_X8, können Sie die onAttachFragment Methode der Aktivitätsklasse verwenden, um eine Liste aller angebrachten Fragmente zu erstellen und später durchlaufen sie:

List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>(); 

@Override 
public void onAttachFragment (Fragment fragment) { 
    fragList.add(new WeakReference(fragment)); 
} 

public List<Fragment> getActiveFragments() { 
ArrayList<Fragment> ret = new ArrayList<Fragment>(); 
for(WeakReference<Fragment> ref : fragList) { 
    Fragment f = ref.get(); 
    if(f != null) { 
     if(f.isVisible()) { 
      ret.add(f); 
     } 
    } 
} 
return ret; 
} 

Eine andere Lösung as explained by Michael wäre das verwenden Support-Bibliothek und nutzen Sie die getFragments-Methode:

public List<Fragment> getVisibleFragments() { 
List<Fragment> allFragments = getSupportFragmentManager().getFragments(); 
if (allFragments == null || allFragments.isEmpty()) { 
    return Collections.emptyList(); 
} 

List<Fragment> visibleFragments = new ArrayList<Fragment>(); 
for (Fragment fragment : allFragments) { 
    if (fragment.isVisible()) { 
     visibleFragments.add(fragment); 
    } 
} 
return visibleFragments; 
} 
Verwandte Themen