android 滑动水平 View 分页与 MapView

标签 android android-mapview paging swipe

我有一个 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/

相关文章:

java - 如何使用 Smack 通过 XMPP 设置/获取配置文件数据

android - MapView.preLoad() 究竟做了什么?

nhibernate - ROW_NUMBER() 和 nhibernate - 查找项目的页面

android - 有没有办法在android任务切换器中更改应用程序的缩略图(长按主页按钮)

android - 从 Mozilla Firefox 重定向到 Android 应用程序 - 深度链接

iPhone map 查看: Annotation Pin - Different Color

android - MapFragment 和 Mapview API v2

asp.net - 当事件触发时,页面从默认值开始

android - 如何将 Android 分页库与 NetworkBoundResource 集成

java - 如何在java中的多个类中使用一个接口(interface)?