Android - SupportMapFragment 与 GoogleMaps API 2.0 给出 IllegalArgumentException

2023-11-21

我正在尝试使用为 Android 提供的最新 Map API 2.0。我正在使用支持库,因为我想支持 Android 2.2。以下是我的代码:

主要活动类别

public class MainActivity extends FragmentActivity {

    public FragmentManager fManager ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fManager = getSupportFragmentManager();
        Button showMapButton = (Button) findViewById(R.id.showMapButton);
        showMapButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                loadMapFragment();
            }
        });
    }

    private void loadMapFragment() {
        MapPageFragment plotterFragment = new MapPageFragment();
        FragmentTransaction ft = fManager.beginTransaction();
        ft.replace(R.id.allFragmentsFrameLayout, plotterFragment);
        ft.addToBackStack(null);
        ft.commit();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

主要活动布局文件

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/showMapButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Show Map"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginTop="30dp"
        android:layout_alignParentTop="true" />


    <FrameLayout
        android:id="@+id/allFragmentsFrameLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true">
        <!-- Put fragments dynamically -->
    </FrameLayout>

</RelativeLayout>

地图片段类

public class MapPageFragment extends SupportMapFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                                         Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return inflater.inflate(R.layout.map_fragment_layout, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }
}

地图片段布局

<?xml version="1.0" encoding="utf-8"?>
<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:id="@+id/map"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    map:uiCompass="true"
    map:mapType= "normal"
    map:uiRotateGestures="true"
    map:uiScrollGestures="true"
    map:uiTiltGestures="true"
    map:uiZoomControls="true"
    map:uiZoomGestures="true" />

Android 清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mapfragmentexample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <permission
        android:name="com.plotter.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="com.plotter.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyA5FtIeLQ1gGUihZIZPQVi3Yz_0l4NG9PY"/>
    </application>

</manifest>

第一次一切都运转良好。即当我点击Show Map按钮加载地图片段并显示地图。当我按下back按钮,地图片段被卸载,我可以看到Show Map再次按钮。

当我按时遇到问题Show Map再次按钮。我收到以下错误:

FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #2: Error inflating class fragment
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:699)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:468)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    at com.mapfragmentexample.MapPageFragment.onCreateView(MapPageFragment.java:17)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4503)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
    at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.IllegalArgumentException: Binary XML file line #2: 
       Duplicate id 0x7f040006, tag null, or parent id 0x0 with another fragment 
       for com.google.android.gms.maps.SupportMapFragment
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:671)
    ... 18 more

我没有明白我出错或遗漏任何东西的地方。


如果你删除,你可以解决这个问题所有嵌套片段 in onDestroyView()。不知道这是否是一个正确的解决方案。

public void onDestroyView() {
   super.onDestroyView(); 
   Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));   
   FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
   ft.remove(fragment);
   ft.commit();
}

并像往常一样给它们充气onCreateView()

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.map, container, false);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - SupportMapFragment 与 GoogleMaps API 2.0 给出 IllegalArgumentException 的相关文章

  • onBackPressed 仅关闭 ProgressDialog

    我意识到我的异步任务有一个小问题 我意识到 当我按 Android 设备上的后退按钮来关闭进度对话框和异步任务时 只有我的进度对话框被关闭 而我的异步任务仍在执行 我真的不知道为什么会发生这种情况 所以我只是希望有人能让我回到正确的轨道并帮
  • 标记上存在语法错误,需要 AnnotationName - 查询错误

    我收到了令牌语法错误 AnnotationName 预期出现在以下行 query findInBackground new FindCallback
  • AdMob 广告未显示

    因此 我使用 Play Services SDK 实施了 AdMob 广告 我已经 按照书本 做了所有事情 但广告不会显示 如果我将 AdView 背景设置为白色 它会显示空白 但不显示广告 我正在使用 Fragments 但我将 AdVi
  • 将片段部分移出屏幕

    我已经被这个问题难住有一段时间了 我试图将包含在 FrameLayout 中的片段向右移动 以便只有片段的左侧 20 可见 我认为我遇到的问题是父级不会让片段移出其边界 或者我不知道如何移动它 我所尝试的一切只是将片段推到右墙上 然后缩放片
  • 如何在状态更改时更改 Android 切换按钮的文本颜色?

    我的切换按钮对于每个状态都有不同的颜色背景 红色和白色 现在我需要在激活时更改切换按钮文本 红色 白色 的颜色 使用 xml 我无法让它工作 也许有人知道我做错了什么 我的布局 xml 中的按钮
  • 删除SD卡上的文件夹

    I tried File delete 但它不起作用 如何删除SD卡上的目录 我正在开发 Android 2 1 在删除目录本身之前 您必须将所有目录清空 请参阅here http www rgagnon com javadetails j
  • cordova - 删除不必要的权限

    我需要在游戏中播放声音 因此我将 org apache cordova media 插件添加到我的应用程序中 现在platforms android AndroidManifest xml包含2个我不需要的条目
  • 如何使用 Retrofit 2 和 RxJava 处理分页

    我知道如何处理 Retrofit 响应 但在使用 rx java 处理来自 REST API 的分页时遇到问题 背景 我使用的其余 api 为我提供了以下响应 并在标题中提供了下一页的链接 HTTP 200 OK Allow GET HEA
  • Android 上的嵌套滚动

    我们的活动中有一个主要的水平滚动视图 以及嵌套在其中的几个垂直滚动视图 这个想法是水平滚动 直到找到所需的垂直列表 然后上下滚动 理想情况下 一旦开始垂直滚动 我希望垂直滚动具有 锁定 现在会发生什么 如果您非常小心 您可以垂直滚动 但如果
  • 终端 (Mac) 上的 ndk-build 命令出错

    这是我在 bashrc 中的环境变量设置 export ANDROID SDK AndroidSDK android sdks export ANDROID NDK AndroidNDK android ndk r8d export PAT
  • Android Fragment 中的 SharedPreferences

    我正在尝试读取 Fragment 内的 SharedPreferences 我的代码用于获取任何其他活动中的首选项 SharedPreferences preferences getSharedPreferences pref 0 我收到错
  • 即时应用程序上的文本转语音崩溃

    我正在实现一个即时应用程序 该应用程序利用 Android 设备上提供的文本转语音功能 我已经设法得到了TextToSpeech按照 Android 开发博客文章中详细说明的说明 实例已初始化并可在非即时应用程序中正常工作Android 中
  • Android中从一个应用程序向另一个应用程序发送数据时的加密

    我想将敏感数据从一个应用程序发送到另一个应用程序 我使用 Intent 并通过 Bundle 发送数据 现在 我应该使用加密算法来加密要发送的数据 同时接收器应用程序将解密数据 哪种算法最适合移动平台 我浏览过RSA文档 建议不建议用于长文
  • 如果从超链接打开,应用程序将启动两次

    我正在开发一个应用程序 可以从多个地方启动 例如日历中的超链接 我在以下场景中面临问题 如果应用程序已启动并在后台运行 并且用户单击本机日历中的事件 超链接来启动应用程序 我的应用程序作为新实例启动两次 在正在运行的应用程序列表中 我可以看
  • Android appwidget 远程视图未更新

    当我从某些活动更新小部件时 列表远程视图不会更新 我的意思是刷新自身 它会出现直到应用程序小部件的更新 日志显示 但不会进入列表视图的适配器以用新数据填充它 public void onUpdate Context context AppW
  • 在 NumberPicker 中显示更多数字

    我有两个问题 第一个问题是删除 NumberPicker 中的分隔线 我在 Android 中扩展 NumberPicker 来解决这个问题 如下所示 import android content Context import androi
  • onActivityResult() 在 startActivityForResult() 之后未使用 Intent.ACTION_GET_CONTENT 调用

    我得到了我的主要Activity其中持有不同的Fragment的 一个片段使用户可以打开一个DialogFragment 该对话框打开声音文件列表 并且该对话框还包含一个 添加 按钮 用户应该能够从中添加自己的声音文件 为此 我想使用标准的
  • 如何在清单文件中添加符合我意图的标志

    我们知道 我们可以使用 java 代码中的 addFlags 方法将一些标志添加到我们的意图中 有什么方法可以将这些标志添加到清单文件本身中 而不是用 java 代码编写 我需要为清单中的一项活动添加 REORDER TO FRONT 标志
  • API 24 AccessibilityService.dispatchGesture() 方法如何工作?

    通过 API 24 我们有了一种向设备发送手势的方法 但是目前还没有可靠的文档或示例 我正在尝试让它工作 但目前手势每次都会点击 onCancelled 回调 这是我调用该方法的代码 TargetApi 24 private void pr
  • Flutter 中 Android RecyclerView.SCROLL STATE IDLE 的等价物是什么

    Android 给出的滚动状态如下RecyclerView SCROLL STATE IDLE它告诉用户何时停止滚动 我找不到任何选择在颤动中Pageview or ListView滚动监听器 我的问题 我需要检测 PageView 中的向

随机推荐

  • 如何在express Node js中获取删除请求的参数

    我对nodejs比较陌生 如何获取Delete请求传递的value参数 我正在使用节点express js 感谢advs 您可以使用 req body 来获取您发送的值 eg router delete test function req
  • HTML Canvas - 圆圈周围的虚线描边

    我确实知道在画布上渲染点划线没有原生支持 但我已经看到人们能够为此提供支持的聪明方法 我想知道是否有任何方法可以翻译它以允许在形状 特别是圆形 周围渲染点状笔划 最简单的方法使用context setLineDash ctx setLine
  • nodejs socket.io 无法连接到服务器?

    我整个下午都在盯着node js 和socket io 示例 我正在尝试拼凑一个简单的页面 它会告诉我有多少用户连接到了服务器 我已阅读以下文档http socket io 以及这里的一些教程 问题准确地概述了我正在尝试做的事情 我也发现了
  • 用户看不到 mysql 工作台中的数据库

    我正在尝试使用 Spring Roo 来学习本教程 所以 我所做的是 转到 mysql 工作台 创建一个名为 pizzashop 的新模式 通过服务器管理帐户访问本地主机 在 用户和权限 中创建一个名为 pizzashop 和密码 pizz
  • Scala Spark,列表缓冲区为空

    在注释 1 中的这段代码中 列表缓冲区项的长度正确显示 但在第二条注释中代码永远不会执行 为什么会出现这种情况呢 val conf new SparkConf setAppName app setMaster local val sc ne
  • “ActionView::Template::Error(未预编译)”在“image_tag nil”上引发

    如果我没有正确处理视图 生产环境将显示 500 这可能是 但我有点粗心 好几次都忘记了这个问题 我怎样才能防止这种情况发生 我该如何使用在生产环境中不加500 image tag必须有一个源 Rails 无法对其执行任何操作 但会引发异常
  • Python:将 3D 数组中的值存储到 csv

    我有以下问题 我有一个 3D 数组 例如matrix np zeros 30 30 100 其中每个条目都是一个坐标并获取一个值 所以matrix 0 0 0 是坐标 x 0 y0 z 0 且值为 0 现在我想将所有值存储在 csv 中 如
  • 使用 Django Rest Framework 和 IOS 应用程序时要使用哪种身份验证?

    我有一个 iOS 应用程序 它使用由 Django REST 框架提供支持的 API 来存储 更新 从数据库中获取数据 我需要提供以下两个功能 将用户数据存储在服务器上 使用电子邮件登录 使用 Facebook 登录 我可以使用两种不同的身
  • 如何动态地将内容加载到 JavaFX 选项卡?

    我有一个 GUI 是使用 JavaFX 和 FXML 制作的 该 GUI 有很多组件 但并非一次性需要所有组件 例如 想象一个 GUI 从其服务器部分接收城市列表 每个城市都在其自己的选项卡上进行描述 并用很多节点进行描述 该城市集包含 3
  • iOS 7 应用程序图标、启动图像和命名约定,同时保留 iOS 6 图标

    我刚刚在 iOS 6 上完成了一个应用程序 并在一周前购买了一个开发者帐户 因此没有太多时间使用 iOS 7 SDK 刚刚下载了 Golden Master 版本并尝试升级我的应用程序以与 iOS 7 兼容 我意识到 iOS 7 需要对应用
  • Python 日志记录:disable() 的反向影响

    The 记录文档说调用logging disable lvl 方法可以 暂时限制整个应用程序的日志输出 但我很难找到 暂时 以以下脚本为例 import logging logging disable logging CRITICAL lo
  • ImageView 上的透明视图

    我被堵在那里了 我试图在背景上放置一个透明视图 我尝试了几种方法 通过 XML android background color transparent or android color 80000000 或者像这样引用 color xml
  • C++ 中的大文件支持

    64 位文件 API 在每个平台上都不同 在窗口中 fseeki64在Linux中 fseeko在 freebsd 中 另一个类似的调用 如何才能最有效地使其更加方便和便携 有什么有用的例子吗 大多数基于 POSIX 的平台都支持 FILE
  • 使用 Boost 进行进程间读取器/写入器锁定

    这个线程在解释如何使用 Boost 实现读取器 写入器锁时 它是黄金 它看起来相对简单 我真的很喜欢它 但它似乎也使用了非命名锁 我需要一个进程间解决方案 不需要是可移植的 可以仅适用于 Windows 有没有办法实现进程间shared m
  • 使用 ODATA 过滤 x 和 y 之间的日期

    我正在研究新的 ASP NET Web API 作为报告工具 在 SQL 中我会这样做 WHERE order date BETWEEN to date 2003 01 01 yyyy mm dd AND to date 2003 12 3
  • 什么xsd会让一个元素无限地拥有自己作为子元素?

    我如何创建一个 xsd 来为我提供这种可以无限继续的 xml 结构
  • 以另一个用户身份执行 Oracle 存储过程

    我主要是一个 Oracle 新手 所以请原谅我 如果这是一个愚蠢的问题 我有一个名为 CODE 的模式 其中包含执行任意 SQL 的存储过程 目前 请忽略与之相关的潜在安全问题 传入的SQL会选择数据 但所有数据都驻留在模式 A B 或 C
  • 对预检请求的响应未通过访问控制检查 Laravel 和 Ajax 调用

    我有一个用 Laravel 5 1 制作的 REST api 托管在远程服务器上 现在 我尝试从另一个网站 我在本地 使用该 API 在 Laravel 中 我设置了发送 CORS 标头所需的行 我还使用 Postman 测试了 API 一
  • ASP.NET 安全角色和权限

    我对 ASP NET 安全模型很满意 在该模型中 人们可以根据用户的角色 例如 用户在 web config 中的角色 来允许 拒绝对用户的访问
  • Android - SupportMapFragment 与 GoogleMaps API 2.0 给出 IllegalArgumentException

    我正在尝试使用为 Android 提供的最新 Map API 2 0 我正在使用支持库 因为我想支持 Android 2 2 以下是我的代码 主要活动类别 public class MainActivity extends Fragment