2013-11-15 4 views
2

Я пытаюсь отобразить карту, используя карту api v2. Я искал ответ, подобный моей проблеме. 23 июля «Ошибка Android: двоичная строка XML-файла # 16: ошибка раздувания фрагмента класса при добавлении фрагмента карты». И я поменял источники в соответствии с ответом. Но все же у меня проблема при использовании фрагмента карты. Любая помощь приветствуется. Спасибо.Ошибка Android: двоичная строка XML-файла # 11: ошибка раздувания фрагмента фрагмента при использовании фрагмента карты

Вот мой XML-код:

<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" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<fragment 
    class="com.google.android.gms.maps.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</RelativeLayout> 

Вот код в деятельности:

package com.example.googlemap; 

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

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) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 

Вот файл манифеста:

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

    <uses-sdk android:minSdkVersion="12" 
      android:targetSdkVersion="16" /> 
    <uses-feature android:required="true" 
      android:glEsVersion="0x00020000"/> 
    <permission android:name="com.example.googlemap.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature"/> 
    <uses-permission android:name="com.example.googlemap.permission.MAPS_RECEIVE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name ="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

    <application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.googlemap.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="API key" /> 
    </application> 
</manifest> 

Я пытаюсь запустить его на моем устройство (Andorid 4.1.2, которое является api 16). Я добавил google-play-services-lib в свой procject. Когда я запускаю приложение, он просто падает. Вот полный лог LogCat:

11-15 17:53:35.785: E/AndroidRuntime(23708): FATAL EXCEPTION: main 
11-15 17:53:35.785: E/AndroidRuntime(23708): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.googlemap/com.example.googlemap.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.ActivityThread.access$600(ActivityThread.java:138) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1204) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.os.Looper.loop(Looper.java:137) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.ActivityThread.main(ActivityThread.java:4911) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at java.lang.reflect.Method.invokeNative(Native Method) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at java.lang.reflect.Method.invoke(Method.java:511) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at dalvik.system.NativeStart.main(Native Method) 
11-15 17:53:35.785: E/AndroidRuntime(23708): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:408) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.Activity.setContentView(Activity.java:2094) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at com.example.googlemap.MainActivity.onCreate(MainActivity.java:13) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.Activity.performCreate(Activity.java:5253) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2045) 
11-15 17:53:35.785: E/AndroidRuntime(23708): ... 11 more 
11-15 17:53:35.785: E/AndroidRuntime(23708): Caused by: java.lang.IllegalArgumentException: Binary XML file line #11: Must specify unique android:id, android:tag, or have a parent with an id for com.google.android.gms.maps.MapFragment 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.app.Activity.onCreateView(Activity.java:4882) 
11-15 17:53:35.785: E/AndroidRuntime(23708): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
11-15 17:53:35.785: E/AndroidRuntime(23708): ... 21 more 

ответ

0

Попробуйте заменить следующие фрагменты:

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

с:

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

Edit:

Возьмите также взглянуть на этот фрагмент из ваш стек:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #11: Must specify unique android:id, android:tag, or have a parent with an id for com.google.android.gms.maps.MapFragment 
+1

Я relpaced его. все еще есть проблемы. Спасибо. – user2995602

+0

Определение вашего фрагмента выглядит тонким, вы должны добавить ID, например: android: id = "@ + id/track_recorder_map_fragment" –

+0

Как я могу сделать его уникальным. Не могли бы вы показать мне, пожалуйста. – user2995602

0

Вы должны добавить два тега метаданных непосредственно перед тегом </application>.

<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="**Replace with your api_key**" /> 
0

Вы можете заменить ниже XML код:

<fragment 
class="com.google.android.gms.maps.MapFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 

С

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

В activity_main.xml имени этого кода вы должны использовать

<fragment 
name="com.google.android.gms.maps.MapFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 

// имя = "Имя пакета.этот класс фрагмент»

0

У меня тот же вопрос, и вот как я могу это исправить

Я убедиться, что я добавил этот мета-данные в моей явной

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

    <meta-date 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="@string/google_maps_key"/> 

    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="@string/google_maps_key"/> 

и убедитесь, что вы добавить идентификатор на мой фрагмент

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

Из протокола ошибок: Binary XML файл строка # 11: Необходимо указать уникальный идентификатор андроида:, Android: тег, или иметь родителя с идентификатором для com.google.android.gms.maps.MapFragment

Из официальной документации:

https://developer.android.com/guide/components/fragments.html

Вы должны указать идентификатор и тег для фрагмент.

Так измените макет из:

<fragment 
    class="com.google.android.gms.maps.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</RelativeLayout> 

к:

<fragment 
    android:id="@+id/your_desired_id" 
    android:tag="tag" 
    class="com.google.android.gms.maps.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</RelativeLayout> 
Смежные вопросы