So, I have two fragments
(F1
and F2
), F1
contains the maps fragment
, F2
contains some data. so when i load fragment F1
, the map load perfectly, but when i go to fragment F2
and come back to fragment one via button click(which loads the fragment again), i get the following error:
06-03 16:13:56.227: E/AndroidRuntime(7748): FATAL EXCEPTION: main
06-03 16:13:56.227: E/AndroidRuntime(7748): android.view.InflateException: Binary XML file line #7: Error inflating class fragment
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
06-03 16:13:56.227: E/AndroidRuntime(7748): at com.porcupyne.mumbaifoodlovers.MapsFragment.onCreateView(MapsFragment.java:46)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.Fragment.performCreateView(Fragment.java:1695)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.BackStackRecord.run(BackStackRecord.java:694)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.os.Handler.handleCallback(Handler.java:725)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.os.Handler.dispatchMessage(Handler.java:92)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.os.Looper.loop(Looper.java:153)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.ActivityThread.main(ActivityThread.java:5297)
06-03 16:13:56.227: E/AndroidRuntime(7748): at java.lang.reflect.Method.invokeNative(Native Method)
06-03 16:13:56.227: E/AndroidRuntime(7748): at java.lang.reflect.Method.invoke(Method.java:511)
06-03 16:13:56.227: E/AndroidRuntime(7748): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
06-03 16:13:56.227: E/AndroidRuntime(7748): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
06-03 16:13:56.227: E/AndroidRuntime(7748): at dalvik.system.NativeStart.main(Native Method)
06-03 16:13:56.227: E/AndroidRuntime(7748): Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f08006a, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.app.Activity.onCreateView(Activity.java:4740)
06-03 16:13:56.227: E/AndroidRuntime(7748): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
06-03 16:13:56.227: E/AndroidRuntime(7748): ... 19 more
Following is my code for the map fragment(F1)
MapsFragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"/>
</RelativeLayout>
This is the java code:
MapsFragment.java
public class MapsFragment extends Fragment {
private GoogleMap googleMap;
double latitude;
double longitude;
protected LocationManager locationManager;
Context context;
boolean isNetworkAvailable = false;
Location location;
public MapsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_maps, container,
false);
try {
initializeMap();
LatLng pos = new LatLng(latitude, longitude);
MarkerOptions marker = new MarkerOptions()
.position(pos)
.title("Fishork")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.marker));
MarkerOptions marker1 = new MarkerOptions()
.position(new LatLng(18.90370, 72.81314))
.title("Zaffran")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.marker));
CircleOptions circle = new CircleOptions().center(pos).radius(2000)
.strokeColor(Color.parseColor("#FFFFFF")).strokeWidth(5)
.fillColor(Color.parseColor("#25f67f21"));
CircleOptions circle1 = new CircleOptions()
.center(new LatLng(18.90370, 72.81314)).radius(1000)
.strokeColor(Color.parseColor("#FFFFFF")).strokeWidth(5)
.fillColor(Color.parseColor("#25f67f21"));
googleMap.addMarker(marker);
googleMap.addMarker(marker1);
googleMap.addCircle(circle);
googleMap.addCircle(circle1);
CameraPosition cp = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(10).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setZoomGesturesEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);
googleMap.getUiSettings().setAllGesturesEnabled(true);
} catch (Exception e) {
Log.e("TAG", "MSG: " + e);
}
return rootView;
}
private void initializeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
if (googleMap == null) {
Toast.makeText(MapsFragment.this.getActivity(),
"Sorry! unable to create maps", Toast.LENGTH_LONG)
.show();
}
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
FragmentTransaction ft = getActivity().getFragmentManager()
.beginTransaction();
ft.remove(fragment);
ft.commit();
}
}
Can someone please help ?! Thank you.