2016-03-20 23 views
0

MEIN PROBLEM
ich eine Android-App erschaffe, wo der Benutzer eine Last von Karten klaut durch (wie Zunder)
Jede Karte ist sehr UI schwer (über eine Google-Kartenansicht und eine AdMob-Anzeige) Ich habe versucht, die Liste in einen Fragmentadapter zu laden. Dies bedeutet ein Fragment für jeden einzelnen Artikel. Dies ist sehr speicherintensiv, da ich ungefähr 30 Google Map-Ansichten und 30 Admob-Ansichten für die 30 Elemente erstelle.
Mein Nexus 5 stürzt unter dieser unnötigen Last natürlich nicht ab.Wiederverwendung Fragmente in FragmentStatePagerAdapter

Meine versuchte Lösung
I 3 Instanzen der fragment.Loaded dieser Fragmente in eine HashMap geschaffen haben.

// für aktuell angezeigte Fragment key = 0

// für vorherige Seite key = -1

für die nächste Seite key = 1

ich den vorherigen Index halten.
Auf der GetItem-Methode des Adapters ich feststellen, ob der Benutzer auf die vorherige Seite oder die nächste Seite gegangen ist.
Ich bekomme das zugehörige Fragment und gebe es zurück.

Mein Problem ist, ich empfangen Ausnahmen halten wie:
Illegal: Fragment hinzugefügt bereits

Ich habe versucht, Lösen und/oder das Fragment zu entfernen, aber kein Glück :(

Irgendwelche Vorschläge
Dank

?

Antwort

0

aus dem Google Play ViewPager Beispiel ...

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenSlidePagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return new ScreenSlidePageFragment(); 
    } 

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

In der getItem (int-Position) müssen Sie eine neue Fragment-Instanz erstellen, alte Fragmente sollten zerstört werden, wenn setOffscreenLimit erreicht wurde. Ich habe das Gefühl, dass du ursprünglich alle 30 Fragmente auf einmal erstellt hast?

+0

Dank für diesen aber es ist nicht das, was ich bin nach Ich möchte Fragmente wieder zu verwenden anstatt 30 Fälle insgesamt dank zu erstellen – dewijones92

+0

Sie 30 Fälle insgesamt haben would'nt .... nur 2-mal der Wert von setOffscreenLimit (links und rechts) würde der Pager-Adapter sie zerstören, wenn er außerhalb dieser Grenzen ist und bei Bedarf neu erstellen –

0

Werfen Sie einen Blick auf Androids effektive Navigation Beispiel für die ordnungsgemäße Verwendung von fragmentstatepagereadapter. http://developer.android.com/shareables/training/EffectiveNavigation.zip

Ich empfehle Ihnen, Ihre admob in der Haupttätigkeit unter viewpager. Sie müssen es also nicht jedes Mal neu starten. Google google map in swipe view wird von google nicht empfohlen, da es schwer ist, sowohl Swipe- als auch Map-Zoom-Funktionen zu handhaben. Verwenden Sie einfach die statische Karten-API, um einen Screenshot der Karte gemäß den von Ihnen bereitgestellten Koordinaten zu erstellen und eine Onclick-Methode zum Starten der Karte als weitere Aktivität zu implementieren.

Verwandte Themen