android使用MapView滑动水平视图分页

时间:2012-02-15 23:22:02

标签: android android-mapview paging swipe

我有一个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时。通过这种方式,视图保持活跃!

1 个答案:

答案 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;

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