我有一个 Android 应用程序,其 View 包含 3 个页面,用户可以通过滑动手指在这些页面之间导航(向左或向右 - 水平 View 分页)。我下载了“android.support.v4.view.ViewPager”并找到了实现滑动部分的方法,这主要归功于这里的教程:http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/
我的问题是我想要我的 View 之一启动 MapView。但是要启动 MapView,我需要一个扩展 MapActivity 的 Activity 。如果我在包含所有 3 个 View 的 MapActivity 中拥有所有“RecordAdapter”类,那么我就会遇到问题,因为每个 MapActivity 只能分配一个 MapView。因此,如果我滑动回到另一个页面,然后再回到 map 页面,项目就会崩溃。我在代码中的方式是:
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 时。这样 View 就可以保持活力!
最佳答案
我猜你的崩溃是由实例化多个 map View 引起的 IllegalStateException?
您是正确的,mapview 是从第二个 View 启动的,viewpager 会准备两侧的 View ,以便在用户想要更改选项卡时可以平滑过渡。它通过实际加载它们来做到这一点。 (有时使用您的 android sdk 中的 hierarchyviewer 工具检查一下)。
无论如何,尝试使用这个 onDestroy 方法:
@Override
public void onDestroy() {
super.onDestroy();
((ViewGroup) map.getParent()).removeView(map);
}
每当 View 被销毁时,它应该删除 mapview,使其准备好重新使用。
如果失败,请尝试将 map View 设为静态:
private static MapView mapview;
然后,如果您的 map 选项卡的多个实例以某种方式创建,它们可以使用相同的 map View 。
关于android 滑动水平 View 分页与 MapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303116/