【问题标题】:How to resolve error inflating class fragment如何解决错误膨胀类片段
【发布时间】:2014-05-25 15:07:49
【问题描述】:

我正在尝试在我的应用程序中使用谷歌地图。为了实现这一点,我下载了谷歌播放服务并将其作为库添加到我的应用程序中,我还从谷歌控制台获得了地图密钥。

但我在 logcat 中收到此错误 -

   android.view.InflateException: Binary XML file line #23: Error inflating class fragment

我的应用清单文件如下 -

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

  <uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />
  <uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<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" />                 
  <application
    android:allowBackup="true"
    android:icon="@drawable/pin_location"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.surajkumar.myapp.MainActivity"
        android:label="@string/app_tag" >
        <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="@string/gmap_apiv2_key" />
  </application>

  </manifest>

布局文件是 -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:background="@color/honeydew" 
>
<TextView 
    android:id="@+id/yourlocationtxt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Refresh to get your location"/>
<LinearLayout 
android:id="@+id/mapsection"
android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="1"
    android:orientation="vertical"
    android:padding="4dp">

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

</LinearLayout>
<Button
    android:id="@+id/sendsms"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/sendlocationbtntxt" 
    android:background="@drawable/button_style"/>

</LinearLayout>

活动代码是 -

package com.surajkumar.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


 public class MainActivity extends Activity {

private GoogleMap peoplesLocMap;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    peoplesLocMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
            .getMap();    
  }

  @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;
  }

  @Override
public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);

}


  }

我在线路上遇到错误

  setContentView(R.layout.activity_main);

logcat 显示以下内容 -

FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #23: Error inflating class fragment
E/AndroidRuntime(1221):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
E/AndroidRuntime(1221):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
E/AndroidRuntime(1221):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
E/AndroidRuntime(1221):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
E/AndroidRuntime(1221):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
E/AndroidRuntime(1221):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
E/AndroidRuntime(1221):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
E/AndroidRuntime(1221):     at android.app.Activity.setContentView(Activity.java:1895)
E/AndroidRuntime(1221):     at com.surajkumar.myapp.MainActivity.showLocMapView(MainActivity.java:146)
E/AndroidRuntime(1221):     at com.surajkumar.myapp.MainActivity.access$0(MainActivity.java:145)
E/AndroidRuntime(1221):     at com.surajkumar.myapp.MainActivity$2.onClick(MainActivity.java:88)
E/AndroidRuntime(1221):     at android.view.View.performClick(View.java:4240)
E/AndroidRuntime(1221):     at android.view.View$PerformClick.run(View.java:17721)
E/AndroidRuntime(1221):     at android.os.Handler.handleCallback(Handler.java:730)
E/AndroidRuntime(1221):     at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(1221):     at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(1221):     at android.app.ActivityThread.main(ActivityThread.java:5103)
E/AndroidRuntime(1221):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1221):     at java.lang.reflect.Method.invoke(Method.java:525)
E/AndroidRuntime(1221):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
E/AndroidRuntime(1221):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(1221):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(1221): Caused by: java.lang.ClassCastException: com.google.android.gms.maps.SupportMapFragment cannot be cast to android.app.Fragment
E/AndroidRuntime(1221):     at android.app.Fragment.instantiate(Fragment.java:585)
E/AndroidRuntime(1221):     at android.app.Fragment.instantiate(Fragment.java:560)
E/AndroidRuntime(1221):     at android.app.Activity.onCreateView(Activity.java:4738)
E/AndroidRuntime(1221):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
E/AndroidRuntime(1221):     ... 21 more

谁能帮忙。我在 stackoverflow 上尝试了许多建议的解决方案,但似乎都没有。请帮助我摆脱这个问题。 提前致谢。

【问题讨论】:

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


    【解决方案1】:

    改变这个

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

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

    考虑到https://developer.android.com/about/dashboards/index.html?utm_source=ausdroid.net,您可以在清单中将 min sdk 更改为 12 及更高版本

    如果您想在 api 级别 11 及以下使用地图,请使用 SupportMapFragment 扩展 FragmentActivity

    如果超过 12 则使用 MapFragment 并扩展 Activity

    您还缺少一个元标记

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

    你也不见了

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    

    【讨论】:

    • 感谢您的即时解决方案。它对我很有用。
    • 上面的问题已经解决了,但是现在的问题是我看不到地图。整个视图只显示一个空白片段区域,只有放大和缩小标志,没有地图可见。我是否需要做其他事情才能使这部分工作。
    • @surajkumar 这是 google map api 密钥的问题。确保您再次按照创建密钥的步骤操作并正确操作
    • 我按照本教程创建了我的地图 api 密钥
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多