2017-08-04 1 views
0

In meiner App gibt es eine Aktivität mit drei Registerkarten, von denen jede eine ListFragment enthält. Die ListFragment müssen unterschiedliche Inhalte zeigen, aber wenn ich es durch das Bündel übergeben wird sie überschrieben und ich drei Fragmente mit dem gleichen Inhalt (das späteste) Hier ist der Code:Übergeben von verschiedenen Listen zu verschiedenen Fragment-Registerkarten in der Aktivität

Im onCreate Verfahren der Aktivität:

{... 
Fragment fragment; 
Bundle bundle= new Bundle(); 
for(int i = 0; i<CATEGORIES.size(); i++) { 

     fragment = new MyListFragment(); 
     bundle.putSerializable("Data", data.get(i)); 
     fragment.setArguments(bundle); 
     screens.put(CATEGORIES.get(i),fragment); 
} 
    setUpViewPagerAndTabs(); 
    ... 
    ... } 

protected void setUpViewPagerAndTabs(){ 
    mViewPager = (ViewPager) findViewById(R.id.viewpager); 
    mViewPager.setOffscreenPageLimit(screens.size()+1); 
    mAdapter = new PageAdapter(screens, getSupportFragmentManager()); 
    mViewPager.setAdapter(mAdapter); 

    tabs = (TabLayout) findViewById(R.id.tabs); 
    tabs.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabs.setTabMode(TabLayout.MODE_FIXED); 
    tabs.setupWithViewPager(mViewPager); 
} 

im Fragmente Klasse erzeugt diese Linie das Überschreiben der entsprechenden Daten:

ArrayList<String> names = (ArrayList<String>) 
    b.getSerializable(Activity.DATA); 

selbst wenn ich versuche, den Wert des Zählers (i) an das Fragment passieren, in o Um das richtige Element der Daten im Fragment auszuwählen, wird es überschrieben. Wie kann ich das beheben? Vielen Dank im Voraus

Antwort

1

Nicht sicher, ob es der Fall ist. Sie übergeben jedoch die Referenz an dasselbe Bündel (außerhalb des Gültigkeitsbereichs) an alle drei Fragmente. Es kann davon abhängen, wann die Serialisierung/Deserialisierung wirksam wird, aber wenn es nach der Schleife geschieht, haben Sie drei Fragmente, die auf den gleichen Inhalt des Bündels zeigen (der letzte).

Versuchen Sie, die Paketbildung innerhalb der Schleife zu bewegen:

for(int i = 0; i<CATEGORIES.size(); i++) { 
    Bundle bundle= new Bundle(); 
    fragment = new MyListFragment(); 
    bundle.putSerializable("Data", data.get(i)); 
    fragment.setArguments(bundle); 
    screens.put(CATEGORIES.get(i),fragment); 
} 
+0

Du hast recht, was für einen dummen Fehler. Vielen Dank. – paola91

Verwandte Themen