2016-03-20 70 views
0

我的問題
我創建Android應用程序,其中用戶刷通過的卡(如打火)
每張卡的負荷是非常UI重(有一個谷歌地圖視圖和AdMob廣告) 我嘗試將列表加載到片段適配器中。這意味着每個項目都有一個片段。由於我爲30個項目創建了大約30個谷歌地圖視圖和30個admob視圖,因此這非常耗費內存。
我的nexus 5在這種不必要的重負載下不會令人驚訝地崩潰。重用片段

我嘗試的解決方案
我已經創建了fragment.Loaded這些片段的3個實例爲HashMap中。

//當前顯示片段 鍵= 0

//對於以前 翻頁鍵= -1

的翻頁鍵 = 1

我把以前的指數。
在適配器的getItem方法上,我檢測用戶是否已經轉到上一頁或下一頁。
我得到相關的片段並返回它。

我的問題是我不斷收到類似的例外:
IllegalStateException異常:片段已經添加

我曾嘗試拆卸和/或刪除片段,但沒有運氣:(

任何建議
感謝

回答

0

來自Google Play ViewPager示例...

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; 
    } 
} 

在getItem(int位置)中,您必須創建一個新的Fragment實例,在達到setOffscreenLimit時應該銷燬舊的碎片。我最初的感覺是你一次創造了30個碎片?

+0

感謝這個 但它不是我什麼 後,我想重用片段,而不是創造總 感謝30種情況下 – dewijones92

+0

您would'nt有30個實例在總....只是2倍set​​OffscreenLimit的價值(左側和右側)尋呼機適配器會在它們超出這些界限時銷燬它們,並在需要時重新創建 –

0

查看android的有效導航示例以正確使用fragmentstatepageradapter。 http://developer.android.com/shareables/training/EffectiveNavigation.zip

我建議把你的admob放在viewpager下面的主要活動中。所以你不需要每次都重新啓動它。谷歌地圖內的刷卡視圖不推薦谷歌,因爲它是很難處理滑動和地圖縮放功能。因此,簡單地使用靜態地圖api,它會根據您提供的座標提供地圖的屏幕截圖,並實施一種onclick方法來將地圖作爲另一個活動進行啓動。