我的问题
我正在创建一个Android应用程序,用户可以通过一堆卡片(如火种)轻扫
每张卡都非常重(有谷歌地图视图和admob广告)
我尝试将列表加载到片段适配器中。这意味着每个项目的片段。这是非常耗费内存的,因为我为30个项目创建了大约30个谷歌地图视图和30个浏览视图
我的关系5毫不奇怪地在这种不必要的重负荷下崩溃。
我的尝试解决方案
我创建了3个片段实例。将这些片段加载到HashMap中。
//用于当前显示的片段 key = 0
//用于上一页 key = -1
下一页 key = 1
我保留了以前的索引 在适配器的getItem方法中,我检测用户是否已转到上一页或下一页 我得到相关的片段并将其返回。
我的问题是我一直收到如下例外:
IllegalStateException:已添加片段
我试过分离和/或删除片段但没有运气:(
有什么建议吗? 感谢
答案 0 :(得分: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个片段的感觉?
答案 1 :(得分:0)
查看android的有效导航示例,以正确使用fragmentstatepageradapter。 http://developer.android.com/shareables/training/EffectiveNavigation.zip
我建议将你的admob放在viewpager下面的主要活动中。所以你不需要每次都重启它。谷歌不建议使用滑动视图中的谷歌地图,因为它很难处理滑动和地图缩放功能。因此,只需使用静态地图api,它会根据您提供的坐标提供地图的屏幕截图,并实现onclick方法以将地图作为另一项活动启动。