安卓水平滑动视图分页与地图视图的翻页

3
我有一个安卓应用程序,其中一个视图包含3页,用户可以通过左右滑动手指进行导航(水平视图分页)。我下载了“android.support.v4.view.ViewPager”,并在这里找到了实现滑动部分的方法,大部分归功于这个教程:http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/ 我的问题是我想要一个视图来启动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;  
            }

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

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

那么我该怎么办?有什么建议吗?

编辑: 我找到了答案。我需要在调用我的ViewPager时添加 "myPager.setOffscreenPageLimit(3);" 这样视图就会保持活动状态!


你能否编辑你的问题中的示例代码以更新为解决方案的示例?谢谢。 - topwik
抱歉回复晚了,我在度假。如我之前所述,您可以使用myPager.setOffscreenPageLimit(3);来解决困难(请查看我提供的链接以了解如何将myPager定义为ViewPager的实例)。我提供的示例代码保持不变。虽然崩溃问题已经解决,但我在设置onClickListeners时遇到了一个严重的问题。因此,我最终使用了一个很棒的flingscrollviewer。如果您不想在视图中使用单击事件,则上面的代码应该可以工作。 - george
谢谢回复。不过我不确定我最初评论的意图是什么... :S 我猜代码一直都在那里。问候, - topwik
+1 表示 myPager.setOffscreenPageLimit(3); - Rahul Patel
1个回答

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

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

无论如何,请尝试使用此onDestroy方法:

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

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

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

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

private static MapView mapview;

如果您的地图选项卡创建了多个实例,它们可以使用相同的地图视图。


谢谢你的回答,但我早就用 flingscrollviewer 解决了这个问题(我在这里找到了一个非常好的例子-> http://www.jmstudio.org/archives/391 但是这个页面现在已经无法访问了)。 - george
同样地,正如我在编辑中所写的那样,原始方法也可以通过添加“myPager.setOffscreenPageLimit(3);”来实现。 - george

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接