android 用 MapView 滑动水平视图分页

问题描述 投票:0回答:1

我有一个 Android 应用程序,其视图包含 3 个页面,用户可以通过滑动手指(向左或向右 - 水平视图分页)在这些页面之间进行导航。我下载了“android.support.v4.view.ViewPager”并找到了实现滑动部分的方法,这主要归功于这里的教程:http://mobile.tutsplus.com/tutorials/android/android-user-interface-设计水平视图分页/

我的问题是我希望我的视图之一启动 MapView。但要启动 MapView,我需要一个扩展 MapActivity 的活动。如果我将所有“RecordAdapter”类都放在一个包含所有 3 个视图的 MapActivity 中,那么我就会遇到问题,因为每个 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;  
            }

工作正常!但这不是我想要的(也许将来我也需要第四页)。

我希望我写的方式不要太复杂..

那我该怎么办?有什么想法吗?

编辑: 我找到了这个问题的答案。我需要添加 “myPager.setOffscreenPageLimit(3);” 当我从代码中调用 ViewPager 时。这样视图就可以保持活力!

android swipe android-mapview
1个回答
1
投票

我猜测你的崩溃是由实例化多个地图视图引起的 IllegalStateException?

您是正确的,地图视图是从第二个视图启动的,viewpager 准备了两侧的视图,以便当用户想要更改选项卡时它可以平滑过渡。它通过实际加载它们来实现这一点。 (使用 android sdk 中的 HierarchyViewer 工具来检查一下)。

无论如何,尝试使用这个 onDestroy 方法:

@Override
public void onDestroy() {
    super.onDestroy();

    ((ViewGroup) map.getParent()).removeView(map);
}

每当视图被销毁时,它应该删除地图视图,使其准备好重新使用。

如果失败,请尝试将地图视图设为静态:

private static MapView mapview;

然后,如果以某种方式创建了地图选项卡的多个实例,它们可以使用相同的地图视图。

© www.soinside.com 2019 - 2024. All rights reserved.