2017-03-25 90 views
0

我有一個活動的工作用這個佈局:加載片段兩次活動

<?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" 
    /> 

裏面我前面提到的iIwant活動自定義視圖回收適配器充電片段,當我點擊我的元素之一,例如:

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(); 

這是我的片段類:

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) { 

      } 
     } 
    } 
} 

這一片段也加載了谷歌地圖的片段,你可以看到它的佈局:

<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> 

當我點擊了一個項目都在第一時間去好了,但是當我點擊第二次在另一個項目中出現此錯誤:

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)

回答

0

您是否嘗試過動態地繪製地圖片段?

當佈局包含// fragment />時,不能將佈局充氣到片段中。只有在動態添加到片段時才支持嵌套片段。

Fragments within Fragments

+0

歡迎來到[Stack Overflow](http://stackoverflow.com/)!請閱讀[我如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer)? –