0
votes

I'm working with an activity with this layout :

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">

    ...


<LinearLayout android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rcyViatgesDetall"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3"/>

<FrameLayout
    android:id="@+id/viatge_detail_container"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="6"
     />

Inside of a custom recycler view adapter for my activity previously mentioned I want to charge fragments when I'm clicking one of my elements, ex :

 holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                    ViatgeDetallViewFragment fragment = new ViatgeDetallViewFragment();
                    //fragment.setArguments(arguments);
                    mActivity.getSupportFragmentManager().beginTransaction()
                            .replace(R.id.viatge_detail_container, fragment)
                            .commit();

And this is my fragment class :

public class ViatgeDetallViewFragment extends Fragment implements OnMapReadyCallback {

    public static final String ARG_ID = "id";
    private GoogleMap mMap;
    private Marker mMarcadorActual;
    private static final int CODI_PETICIO_PERMIS_GPS = 13;

    public ViatgeDetallViewFragment() {
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_view, container, false);


        MapFragment mapFragment = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.fragment_view_map); //esto funciona
        mapFragment.getMapAsync(this);


        return rootView;
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;


        if (ActivityCompat.checkSelfPermission(this.getContext(), //solo this
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this.getContext(),  //solo this
                        Manifest.permission.ACCESS_COARSE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {
            // NO tinc permisos, en demano
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(
                        new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, CODI_PETICIO_PERMIS_GPS);
            }
        } else {
            mMap.setMyLocationEnabled(true);
        }



 .....

    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0]==PackageManager.PERMISSION_GRANTED) {

            try {
                mMap.setMyLocationEnabled(true);
            }catch(SecurityException ex) {

            }
        }
    }
}

This fragment also loads a google Maps fragment, as you can see in it's layout:

<LinearLayout android:id="@+id/layout_fragment_view" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_view_map"
        class="com.google.android.gms.maps.MapFragment"></fragment>

</LinearLayout>

When I tap for the first time in a item everything works fine, but when I tap for the second time in another item I get this error:

FATAL EXCEPTION: main Process: com.example.usuari.myapplication3, PID: 31870 android.view.InflateException: Binary XML file line #18: Binary XML file line #18: Error inflating class fragment at android.view.LayoutInflater.inflate(LayoutInflater.java:551) at android.view.LayoutInflater.inflate(LayoutInflater.java:429) at com.example.usuari.myapplication3.ViatgeDetallViewFragment.onCreateView(ViatgeDetallViewFragment.java:73) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) at android.view.LayoutInflater.inflate(LayoutInflater.java:527) at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  at com.example.usuari.myapplication3.ViatgeDetallViewFragment.onCreateView(ViatgeDetallViewFragment.java:73)  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189)  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)  at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757)  at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355)  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146)  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098)  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008)  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7229)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  Caused by: java.lang.IllegalArgumentException: Binary XML file line 18: Duplicate id 0x7f0d00a9, tag null, or parent id 0x7f0d00a7 with another fragment for com.google.android.gms.maps.MapFragment at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2222) at android.app.FragmentController.onCreateView(FragmentController.java:98) at android.app.Activity.onCreateView(Activity.java:6070) at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:36) at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:766) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)  at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)  at android.view.LayoutInflater.inflate(LayoutInflater.java:527)  at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  at com.example.usuari.myapplication3.ViatgeDetallViewFragment.onCreateView(ViatgeDetallViewFragment.java:73)  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189)  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)  at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757)  at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355)  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146)  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098)  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008)  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7229)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

1

1 Answers

0
votes

Did you tried inflating the map fragment dynamically??

You cannot inflate a layout into a fragment when that layout includes a//fragment/>. Nested fragments are only supported when added to a fragment dynamically.

Fragments within Fragments