2011-11-23 133 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" />