Android - SupportMapFragment avec GoogleMaps API 2.0 donnant IllegalArgumentException
Je suis en train d'utiliser la Carte la plus récente de l'API 2.0 fourni pour Android. Je suis l'aide de la Bibliothèque de prise en charge que je veux soutenir Android 2.2. Voici mon code:
L'Activité principale de classe
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;
}
}
Activité principale de fichier de mise en page
<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>
Fragment De Carte De Classe
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);
}
}
Fragment De Carte Mise En Page
<?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 Fichier Manifeste
<?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>
Tout fonctionne bien pour la première fois. c'est à dire Lorsque je clique sur le Show Map
bouton le fragment de carte se charge et affiche la carte. Lorsque j'appuie sur retour bouton, le fragment de carte est déchargé et je peux voir la Show Map
nouveau sur le bouton.
Je fais face à un problème lorsque j'appuie sur le Show Map
nouveau sur le bouton. J'obtiens l'erreur suivante:
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
Je ne suis pas arriver là où je suis arriver de mal ou de manquer quelque chose.
J'ai le même problème...laissez-moi savoir si vous le réparer
J'ai posté une réponse
Je ne pense pas que vous devriez l'utiliser 🙂
Si vous connaissez mieux, je vais l'apprécier pleinement
OriginalL'auteur Nik | 2013-01-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez résoudre ce problème, si vous supprimez tous imbriqués les fragments dans
onDestroyView()
. Ne sais pas si c'est une bonne solution.Et les gonfler comme d'habitude dans
onCreateView()
Cela ne fonctionne pas lors de l'orientation de l'écran
ajouter ft.commitAllowingStateLoss(); Si tu veux gérer l'orientation.
Ce n'est pas une bonne solution.
La création de fragments via le code. Voir ma réponse ci-dessous.
OriginalL'auteur
Vous devez utiliser getChildFragmentManager() pour ajouter SupportMapFragment non pas par xml.
"Pourquoi", voir la documentation officielle: http://developer.android.com/about/versions/android-4.2.html#NestedFragments
Prendre un coup d'oeil à ma réponse ici: https://stackoverflow.com/a/15512285/2183804
Je suis actuellement à l'aide de Cette solution et j'aimerais essayer votre suggestion. Merci
OriginalL'auteur
Vous ne pouvez pas gonfler une mise en page dans un fragment lorsqu'qui comprend une mise en page fragment. Imbriqués les fragments ne sont pris en charge lorsqu'il est ajouté à un fragment de façon dynamique. Plus de détails ici!
OriginalL'auteur
Utilisé cette solution (similaire à d'autres):
J'ai eu des problèmes avant d'utiliser le si (fragment.isResumed).
OriginalL'auteur
OriginalL'auteur
Utilisation
dialog.SetContentView()
méthode dans votre activité estonCreate()
cause, quand nous tring à charger.Boîte de dialogue nouveau, il se charge seulement de dialogue non pas à l'ensemble de l'activité du cycle de vie et l'entraîne à l'exception de la Double identité.
De l'essayer.
OriginalL'auteur
Essayer cette
Cartes fragment de mise en page
Fragment de carte de classe
OriginalL'auteur
J'ai utilisé Natalia réponse, mais à la fois éclaté de l'application.
Utilisation de celui-ci et il a parfaitement fonctionné sans se briser.
https://stackoverflow.com/a/7953801/3364157
OriginalL'auteur
Utiliser ce sauve la journée.
OriginalL'auteur
Utiliser l'intention des drapeaux:
lors de l'appel principal de l'activité.
OriginalL'auteur
J'ai eu le même problème. Essayez d'ajouter ...
... à
fragment
dans le fichier de layout!OriginalL'auteur