【问题标题】:android.view.InflateException: Binary XML file line #13: Error inflating class fragmentandroid.view.InflateException: Binary XML file line #13: Error inflating class fragment
【发布时间】:2014-03-13 17:04:33
【问题描述】:

我已经在 Eclipse 中工作了很长时间(3 周)。使用 google maps android api v2 的“入门”指南,我一直遇到这个问题。除了在线和 youtube 上的各种教程之外,我还尝试了从 SO 上的帖子中完成这项工作的所有各种方法,但我仍然无法让它发挥作用。我用过Activity, FragmentActivity, , , 给fragment加名字, 膨胀类fragment还是报错。

主要错误(LogCat 中最顶层的错误)

03-12 11:50:04.793: E/AndroidRuntime(9002): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.map2/com.example.map2.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment

MainActivty.java(Activity 和 FragmentActivity 我都试过了)

package com.example.map2;

import android.os.Bundle;
//import android.app.Activity;
import android.view.Menu;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

Activity_main.xml(我用过 MapFragment 和 SupportMapFragment)

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/map"
    android:name="com.example.map2.MainActivity"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       class="com.google.android.gms.maps.SupportMapFragment"/>

Map2Manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
    android:minSdkVersion="13"
    android:targetSdkVersion="19" />

<permission
    android:name="com.example.map2.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example.map2.permission.MAPS_RECEIVE" />


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
    Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<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" >

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

    <activity
        android:name="com.example.map2.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>


</application>

库设置等截图:

【问题讨论】:

  • @FCo AFAIK 这不是问题,它是应用程序标签的孩子,这是正确的
  • @Raghunandan 建议您将其放在 &lt;/application&gt; 结束标记之前 developers.google.com/maps/documentation/android/… 。以前对其他人来说一直是个问题。
  • @FCo 不,它没有这么说。它在关闭标记之前表示应用程序标记的子级
  • @Raghunandan "在 AndroidManifest.xml 中,添加以下元素作为 元素的子元素,方法是将其插入到结束标记 之前:" - 添加 API 的第 1 步应用程序的关键。当我之前没有把它放在正确的位置时,个人给我造成了问题。
  • @FCo 表示作为应用程序标签的子级。自己试试应该没问题

标签: android eclipse google-maps google-maps-android-api-2


【解决方案1】:

你有

android:minSdkVersion="13"

所以你需要使用MapFragment 并扩展Activity

改变这个

class="com.google.android.gms.maps.SupportMapFragment"/>

class="com.google.android.gms.maps.MapFragment"/>

然后改变这个

public class MainActivity extends FragmentActivity {

public class MainActivity extends Activity {

也将元标记误认为是应用程序标记的子标记

<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

【讨论】:

  • 所以我做了您的更改并将元数据移动到 之前,就像其他人所说的那样。我收到“无法执行 dex:java 堆空间”提示。(我已经完成了关于在 eclipse.ini 文件中增加 maxpermsize、xms 等的所有建议)。我的日志猫通常会在此时列出错误,但现在它没有显示任何内容。
  • @KFP 这与您的代码无关。也作为 标签的子标签意味着在标签关闭之前。你所拥有的是正确的。一开始就没有错。它就在标签关闭之前。如果您在开始时拥有它,它也是应用程序标记的子项。至于你在评论中说的问题与代码无关
  • 另外:一旦程序运行,我无法单步执行甚至终止程序。我正在使用的eclipse(22.3.0)所有这些命令都变灰了。我的绿色箭头始终显示该应用程序仍在运行。我也在 SO 上发布了这个问题,但到目前为止还没有解决方案。我猜还有一个错误。
  • @KFP 您需要在真实设备上进行测试。您无法创建 avd,提交的错误将在下一个 uild 中修复
  • 我使用的是真实设备。如果我取消选中 Java 构建路径中的 Android 私有库(以解决 Java 堆空间错误),它会通过它并尝试在设备上运行但失败并且我得到“错误膨胀类片段。
【解决方案2】:

这个: <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="#" /> 应该在这之前:&lt;/application&gt; 这可能无法解决您的问题,但以后可能会导致另一个问题。

另外,如果这是您的整个清单文件,那么您还缺少另一个 &lt;meta-data&gt;<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

【讨论】:

    【解决方案3】:

    我遵循 Google Maps Android API V2 教程,并且拥有与您相同的代码。我遇到了这个问题,我已经解决了。
    如果你想在 android api

    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

    这是我的 Android 清单文件

        <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.demogooglemap"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="21" />
    
        <permission
            android:name="com.example.demogooglemap.permision.MAPS_RECEIVE"
            android:protectionLevel="signature" />
    
        <uses-permission android:name="com.example.demogooglemap.permision.MAPS_RECEIVE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
        <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" >
            <meta-data
                android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />
            <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="AIzaSyCpDUn3K-IJJxqTmR4qIsNHGgNdqF7YmV0" />
    
            <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>
        </application>
    
    </manifest>
    

    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      希望有人会觉得它有用。 我遇到了同样的问题并尝试了许多修复,但没有任何效果。我解决了它如下。 1) 我使用的是安卓 2.1.2。 2)我使用自动片段创建方法创建片段,如图所示 this screen shot。 3) 每次我运行程序时都会遇到同样的错误。

      ->解决方案

      • 我分别为我的片段创建了 java 类和 XML 文件。as 下列的。 Java Class Screenshot.

        同样,我为片段创建了一个新的布局文件。

      并在我新创建的 java 类中执行了以下操作。

      package com.example.shaoorjan.fragmentxml;
      
        import android.app.Fragment;
        import android.os.Bundle;
        import android.support.annotation.Nullable;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
      
      
         public class BlankFragment extends Fragment {
      
      @Nullable
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,      Bundle savedInstanceState) {
          return inflater.inflate(R.layout.fragment_blank,container,false);
      }
       }
      

      一切正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-13
        • 2013-10-07
        • 2015-05-01
        • 2014-06-18
        • 2015-01-13
        • 2013-09-10
        • 2015-04-15
        • 2014-06-24
        相关资源
        最近更新 更多