我有一个Android应用程序,其中包含3个页面,用户可以在其中通过滑动手指(向左或向右 - 水平视图分页)进行导航。我下载了“android.support.v4.view.ViewPager”并找到了实现刷卡部分的方法,这主要归功于本教程:http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/
我的问题是我希望我的一个视图启动MapView。但要启动MapView,我需要一个扩展MapActivity的活动。如果我在包含所有3个视图的MapActivity中拥有我的所有“RecordAdapter”类,那么我就会遇到问题,因为每个MapActivity只能分配一个MapView。因此,如果我滑回另一个页面然后返回到地图页面,项目崩溃了。我在代码中的方式是:
switch (position) {
case 0:
resId = R.layout.record1;
break;
case 1:
resId = R.layout.record2;
break;
case 2:
resId = R.layout.record3;
break;
}
“record3”包含我的MapView。从试验崩溃发生时,我回到“record1”,然后再回到“record2”。它似乎在它转到record2(?)时启动一个新的MapView!这一定是这种情况,因为如果我在中间有MapView,那就太奇怪了:
switch (position) {
case 0:
resId = R.layout.record1;
break;
case 1:
resId = R.layout.record3;
break;
case 2:
resId = R.layout.record2;
break;
}
它运作正常!但这不是我想要的(也许我将来也需要一个4页的页面)。
我希望我写它的方式并不太复杂。
那我该怎么办?有什么想法吗?
编辑: 我找到了答案。我需要补充一下 “myPager.setOffscreenPageLimit(3);” 当我从我的代码中调用我的ViewPager时。通过这种方式,视图保持活跃!
答案 0 :(得分:1)
我猜你的崩溃是由实例化多个mapview引起的IllegalStateException?
你是正确的,mapview是从第二个视图启动的,viewpager准备两边的视图,以便当用户想要更改标签时它可以平滑过渡。它通过实际加载它来实现这一点。 (使用android sdk中的hierarchyviewer工具来检查一下这个。)
无论如何,尝试使用这个onDestroy方法:
@Override
public void onDestroy() {
super.onDestroy();
((ViewGroup) map.getParent()).removeView(map);
}
每当视图被破坏时,它应该删除mapview,使其可以重复使用。
如果失败,请尝试将mapview设为静态:
private static MapView mapview;
然后,如果以某种方式创建了地图选项卡的多个实例,则可以使用相同的地图视图。