2016-12-27 46 views
0

運行代碼後出現錯誤Error inflating class二進制XML文件行#26:在Android中加載類片段時出錯

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.umairgulfad.bismillah, PID: 14270 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.umairgulfad.bismillah/com.example.umairgulfad.bismillah.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class fragment 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2697) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) 
         at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4380) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1438) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5912) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
        Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class fragment 
         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:436) 
         at android.app.Activity.setContentView(Activity.java:2245) 
         at com.example.umairgulfad.bismillah.MainActivity.onCreate(MainActivity.java:73) 
         at android.app.Activity.performCreate(Activity.java:6185) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2650) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) 
         at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4380) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1438) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5912) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
        Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.example.umairgulfad.bismillah.MainActivity$MyDetailFragment that is not a Fragment 
         at android.app.Fragment.instantiate(Fragment.java:618) 
         at android.app.Fragment.instantiate(Fragment.java:594) 
         at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2124) 
         at android.app.Activity.onCreateView(Activity.java:5523) 
         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:740) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:436) 
         at android.app.Activity.setContentView(Activity.java:2245) 
         at com.example.umairgulfad.bismillah.MainActivity.onCreate(MainActivity.java:73) 
         at android.app.Activity.performCreate(Activity.java:6185) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2650) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) 
         at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4380) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1438) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5912) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
        Caused by: java.lang.ClassCastException 
         at android.app.Fragment.instantiate(Fragment.java:618) 
         at android.app.Fragment.instantiate(Fragment.java:594) 
         at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2124) 
         at android.app.Activity.onCreateView(Activity.java:5523) 
         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:740) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:436) 
         at android.app.Activity.setContentView(Activity.java:2245) 
         at com.example.umairgulfad.bismillah.MainActivity.onCreate(MainActivity.java:73) 
         at android.app.Activity.performCreate(Activity.java:6185) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2650) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771) 
         at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4380) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1438) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5912) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

該代碼在縱向模式下運行良好,但在進入橫向模式時,應用程序停止工作。這裏有什麼問題。提前致謝。

佈局 - 脊/ activity_main.xml中

<LinearLayout 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" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:orientation="vertical" 
     tools:context=".MainActivity" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="sw600dp" /> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal"> 
      <fragment 
       android:name="com.example.umairgulfad.bismillah.MainActivity$MyListFragment" 
       android:id="@+id/list_fragment" 
       android:layout_height="match_parent" 
       android:layout_width="0dp" 
       android:layout_weight="1" /> 
      <fragment 
       android:name="com.example.umairgulfad.bismillah.MainActivity$MyDetailFragment" 
       android:id="@+id/detail_fragment" 
       android:layout_height="match_parent" 
       android:layout_width="0dp" 
       android:layout_weight="2" /> 

     </LinearLayout> 

    </LinearLayout> 

佈局/ activity_main.xml中

<LinearLayout 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" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:orientation="vertical" 
     tools:context=".MainActivity" > 

     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="250dp" 
      android:layout_weight="2" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:id="@+id/mapwhere" /> 

    </LinearLayout> 

佈局 - 脊/ detailfragment.xml

<LinearLayout 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" 
     android:orientation="vertical"> 



     <TextView 
      android:id="@+id/title_detailfragment" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Detail Fragment"/> 

    </LinearLayout> 

MainActivity

import android.app.Activity; 
    import android.app.FragmentTransaction; 
    import android.app.ListFragment; 
    import android.os.Bundle; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListAdapter; 

    import com.google.android.gms.maps.GoogleMap; 
    import com.google.android.gms.maps.OnMapReadyCallback; 
    import com.google.android.gms.maps.SupportMapFragment; 


    public class MainActivity extends Activity implements OnMapReadyCallback { 

     // if run on phone, isSinglePane = true 
     // if run on tablet, isSinglePane = false 
     boolean isSinglePane; 

     static String[] month ={ 
       "January", "February", "March", "April", 
       "May", "June", "July", "August", 
       "September", "October", "November", "December"}; 

     @Override 
     public void onMapReady(GoogleMap googleMap) { 

     } 

     public static class MyListFragment extends ListFragment { 

      @Override 
      public void onActivityCreated(Bundle savedInstanceState) { 
       // TODO Auto-generated method stub 
       super.onActivityCreated(savedInstanceState); 

       ListAdapter myArrayAdapter = 
         new ArrayAdapter<String>(
           getActivity(), android.R.layout.simple_list_item_1, month); 
       setListAdapter(myArrayAdapter); 

      } 

     } 

     public class MyDetailFragment extends SupportMapFragment { 
      @Override 
      public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) { 
       View rootView = layoutInflater.inflate(R.layout.detailfragment, viewGroup, false); 
       SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapwhere); 
       mapFragment.getMapAsync(new OnMapReadyCallback() { 
        @Override 
        public void onMapReady(GoogleMap googleMap) { 

        } 
       }); 



       return rootView; 
      } 
     } 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      View v = findViewById(R.id.mapwhere); 
      if(v == null){ 
       //it's run on tablet 
       isSinglePane = false; 
     /* 
     * MyListFragment and MyDetailFragment have been loaded in XML, 
     * no need load. 
     */ 

      }else{ 
       //it's run on phone 
       //Load MyListFragment programmatically 
       isSinglePane = true; 

       if(savedInstanceState == null){ 
        //if's the first time created 
        MyListFragment myListFragment = new MyListFragment(); 
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
        fragmentTransaction.add(R.id.mapwhere, myListFragment); 
        fragmentTransaction.commit(); 
       } 
      } 
     } 

    } 

我的ListFragmentandroid.support.v4.app.ListFragment延伸,但現在的錯誤是在fragmentTransaction.add(R.id.mapwhere, myListFragment);線誤差

無法解析方法:添加(INT,com.example.umairgulfad.bismillad .MainActivity.MyLis tFragments)

+0

請編輯您的問題和provi de與您的錯誤相關的完整Java堆棧跟蹤。 – CommonsWare

+0

請編輯您的問題,幷包含來自logcat – Karakuri

+0

@Karakuri的完整堆棧跟蹤請參閱有問題的跟蹤。 – Humty

回答

1
Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.example.umairgulfad.bismillah.MainActivity$MyDetailFragment that is not a Fragment 

有兩種類型的碎片:本地碎片和支持/回溯碎片。你需要選擇一種類型並堅持。

既然這樣,你要使用這兩個:

  • 您正在使用getFragmentManager()添加MyListFragment,表明MyListFragment延伸android.app.ListFragment,不android.support.v4.app.ListFragment

  • 您正在使用SupportMapFragment,這是支持/ backport片段

+0

哪一個應該用?用'SupportMapFragment'我應該使用'getFragmentManager()'的位置? – Humty

+0

@CommonWare我擴展ListFragment類與'android.support.v4.app.ListFragment'現在錯誤在'fragmentTransaction.add(R.id.mapwhere,myListFragment);'行錯誤是'無法解析方法:add( int,com.example.umairgulfad.bismillad.MainActivity.MyListFragments)' – Humty

+0

@Humty:使用一種類型的片段或其他的一部分是使用所有相關的類和方法。對於本地片段,您從'Activity'繼承並使用'getFragmentManager()'。對於支持/回傳片段,您可以從'FragmentActivity'(或者像'AppCompatActivity''那樣擴展它)並使用'getSupportFragmentManager()'繼承。 – CommonsWare

相關問題