2011-11-23 109 views
16

我得到一個runtimeException與下面的代碼,有沒有人知道爲什麼?RuntimeException:錯誤的類片段膨脹

public class FragsApplicationActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

SuggestionFrags類

public class SuggestionFrags extends Fragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

} 

main.xml中

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

    <fragment 
     android:id="@+id/fragment1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     class="com.samplefragsapplication.SuggestionFrags" /> 

</LinearLayout> 

我得到這個異常:

11-23 18:09:23.899: E/AndroidRuntime(2436): FATAL EXCEPTION: main 
11-23 18:09:23.899: E/AndroidRuntime(2436): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.samplefragsapplication/com.samplefragsapplication.FragsApplicationActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.os.Looper.loop(Looper.java:123) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at dalvik.system.NativeStart.main(Native Method) 
11-23 18:09:23.899: E/AndroidRuntime(2436): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.inflate(LayoutInflater.java:385) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.Activity.setContentView(Activity.java:1647) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at com.samplefragsapplication.FragsApplicationActivity.onCreate(FragsApplicationActivity.java:12) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-23 18:09:23.899: E/AndroidRuntime(2436): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.samplefragsapplication-2.apk] 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.createView(LayoutInflater.java:466) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:544) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
11-23 18:09:23.899: E/AndroidRuntime(2436):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
+0

什麼是例外? –

+0

你可以發佈LogCat中的整個堆棧跟蹤而不是一行嗎? – kaspermoerch

回答

4

適當的形式將

<fragment 
    android:id="@+id/fragment1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:name="com.samplefragsapplication.SuggestionFrags" /> 

UPD:通過logcat輸出判斷,您沒有可用的片段。如果您運行的是預蜂窩機器人(但> = 1.6),則可以使用compatibility library。片段在3.0中引入。

+0

我也試過這個..但我沒有get.same異常。 – user977808

+0

我正在使用兼容性庫。我設置了我的minSdkVersion =「7」。但是這仍然不能解決問題。 –

13

如果您打算使用Fragments您需要擴展FragmentActivity而不是Activity

+4

僅當使用兼容性庫時纔有效。 –

2

我剛剛遇到了同樣的問題,我發現在我的main.xml中我錯誤地引用了片段類。

相反的:

<fragment android:id="@+id/frag_capt" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.company.test.applicationname.fragmentname" /> 

嘗試:

<fragment android:id="@+id/frag_capt" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.company.test.DetailFrag" /> 

這個固定我的問題。 祝你好運。

+0

我試過了,但它並沒有解決我的問題。 –

+0

完美適合我。謝謝!!!!! – cw1998

5

要解決此問題,您必須從FragmentApplicationActivity中的FragmentActivity而不是Activity進行擴展。

3

如果在onActivityCreated()被調用之前,在片段中使用getActivity()進行操作,則可能會發生異常android.view.InflateException: Binary XML file line: #... Error inflating class fragment。在這種情況下,您會收到錯誤的活動參考信息,因此無法依靠此參考。

例如下一個模式是錯誤的:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    final View view = inflater.inflate(R.layout..., container, false); 

    Button button = getActivity().findViewById(R.id...); 
    button.setOnClickListener(...); - another problem: button is null 

    return view; 
} 
+0

如何克服這一點? – Mani

+1

@Mani關注http://stackoverflow.com/a/15137231/1338803 –

0

確保機器人:名字= 「類名」 是該列表中的第一個參數

<fragment 
    android:name="com.name.first" 
    android:id="@+id/" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 
0

我有同樣的問題,總結:

  • 從FragmentActivity
  • 擴展按照這個結構,佈局

    <fragment 
        android:id="@+id/map" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:name="com.google.android.gms.maps.MapFragment" 
    /> 
    
1

試試這個

<fragment 
     android:id="@+id/fragment1" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" />