J'ai un tiroir de navigation avec des fragments. Chaque fragment a un MapFragment dans la mise en page. Initialement, lorsque l'application est exécutée, le tiroir de navigation ouvre le fragment une fois, mais lorsque je clique sur le même élément de navigation pour ouvrir le même fragment une seconde fois (après avoir visité d'autres fragments), l'erreur suivante apparaît dans la fonction onCreateView()
.
Binary XML file line #1: Error inflating class fragment
Ci-dessous mon code pour le fragment:
user_map_Fragment.xml
<LinearLayout
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:orientation="vertical"
Android:id="@+id/parentContainer"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<fragment
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:name="com.google.Android.gms.maps.MapFragment"/>
......
</LinearLayout>
MainFragment.cs
public class MainFragement : Android.Support.V4.App.Fragment, IOnMapReadyCallback, ILocationListener, Android.Views.View.IOnKeyListener
{
private GoogleMap mMap;
private LocationManager _locationManager;
private string _locationProvider;
private Android.Locations.Location _currentLocation;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (v == null)
{
v = inflater.Inflate(Resource.Layout.Main, container, false);
SetUpMap();
InitializeLocationManager();
}
return v;
}
}
private void SetUpMap()
{
if (mMap == null)
{
Activity.FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
}
}
Journal d'accident:
06-22 10:56:50.798 E/mono-rt (15470): Java.lang.IllegalArgumentException: Binary XML file line #1: Duplicate id 0x7f0a0099, tag null, or parent id 0x7f0a007b with another fragment for com.google.Android.gms.maps.MapFragment
06-22 10:56:50.798 E/mono-rt (15470): at Android.app.FragmentManagerImpl.onCreateView(FragmentManager.Java:2136)
06-22 10:56:50.798 E/mono-rt (15470): at Android.app.Activity.onCreateView(Activity.Java:5516)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.Java:34)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.Java:78)
06-22 10:56:50.798 E/mono-rt (15470): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:733)
06-22 10:56:50.798 E/mono-rt (15470): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:806)
06-22 10:56:50.798 E/mono-rt (15470): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:809)
06-22 10:56:50.798 E/mono-rt (15470): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:504)
06-22 10:56:50.798 E/mono-rt (15470): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:414)
06-22 10:56:50.798 E/mono-rt (15470): at md5ec4b17f0066095dde498afe2bdaa8cb9.PeopleCheckinFragment.n_onCreateView(Native Method)
06-22 10:56:50.798 E/mono-rt (15470): at md5ec4b17f0066095dde498afe2bdaa8cb9.PeopleCheckinFragment.onCreateView(PeopleCheckinFragment.Java:39)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.Fragment.performCreateView(Fragment.Java:1962)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1026)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1207)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:738)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1572)
06-22 10:56:50.798 E/mono-rt (15470): at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:493)
06-22 10:56:50.798 E/mono-rt (15470): at Android.os.Handler.handleCallback(Handler.Java:739)
06-22 10:56:50.798 E/mono-rt (15470): at Android.os.Handler.dispatchMessage(Handler.Java:95)
06-22 10:56:50.798 E/mono-rt (15470): at Android.os.Looper.loop(Looper.Java:135)
06-22 10:56:50.798 E/mono-rt (15470): at Android.app.ActivityThread.main(ActivityThread.Java:5930)
06-22 10:56:50.798 E/mono-rt (15470): at Java.lang.reflect.Method.invoke(Native Method)
06-22 10:56:50.798 E/mono-rt (15470): at Java.lang.reflect.Method.invoke(Method.Java:372)
06-22 10:56:50.798 E/mono-rt (15470): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1405)
06-22 10:56:50.798 E/mono-rt (15470): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1200)
Comment résoudre ce problème?
Au lieu de cela
<fragment
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:name="com.google.Android.gms.maps.MapFragment"/>
utilisez ceci
<fragment
Android:id="@+id/map"
Android:name="com.google.Android.gms.maps.SupportMapFragment"
Android:layout_width="match_parent"
Android:layout_height="200dp"
/>
en classe Java
import Android.os.Bundle;
import Android.support.annotation.Nullable;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import com.google.Android.gms.maps.CameraUpdateFactory;
import com.google.Android.gms.maps.GoogleMap;
import com.google.Android.gms.maps.OnMapReadyCallback;
import com.google.Android.gms.maps.SupportMapFragment;
import com.google.Android.gms.maps.model.LatLng;
import com.google.Android.gms.maps.model.MarkerOptions;
public class ClinicFragment extends Fragment implements OnMapReadyCallback {
private GoogleMap mMap;
public static ClinicFragment newInstance() {
ClinicFragment fragment = new ClinicFragment();
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_maps, null, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
return view;
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}
Essayer de changer
Android:name="com.google.Android.gms.maps.SupportMapFragment"
//and
Activity.FragmentManager.FindFragmentById<SupportMapFragment>(Resource.Id.map).GetMapAsync(this);
au lieu de
Android:name="com.google.Android.gms.maps.MapFragment"
//and
Activity.FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
EDIT 1
supprimer votre Android.app.Fragment et importer des packages de support
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.app.FragmentManager;
EDIT 2
Essaye ça
SupportMapFragment m = ((SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map));
cela peut vous aider
Android:hardwareAccelerated="true"
à ma MapsActivity
sur AndroidManifest.xml
Travaillé pour moi.