2011-11-23 43 views
16

Tôi nhận được một thời gian chạyException với mã sau đây, không ai biết tại sao?RuntimeException: Lỗi lạm phát phân đoạn lớp

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 lớp

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> 

Tôi nhận được ngoại lệ này:

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

ngoại trừ là bao nhiêu? –

+0

Bạn có thể đăng toàn bộ stacktrace từ LogCat thay vì chỉ một dòng không? – kaspermoerch

Trả lời

4

Các hình thức thích hợp sẽ

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

UPD: đánh giá bằng đầu ra logcat, bạn không có sẵn phân đoạn. Nếu bạn đang chạy Android trước Honeycomb (nhưng> = 1.6), bạn có thể sử dụng compatibility library. Các mảnh vỡ đã được giới thiệu trong 3.0.

+0

Tôi đã thử điều này .. nhưng tôi đã không nhận được ngoại lệ. – user977808

+0

Tôi đang sử dụng thư viện tương thích. Tôi đặt minSdkVersion = "7". Nhưng điều đó vẫn không giải quyết được vấn đề. –

13

Nếu bạn định sử dụng Fragments, bạn cần gia hạn FragmentActivity không phải Activity.

+4

tính năng này chỉ hợp lệ khi sử dụng thư viện tương thích. –

2

Tôi vừa gặp vấn đề tương tự và những gì tôi thấy là trong tệp main.xml của mình, tôi đã tham chiếu không chính xác lớp phân đoạn.

Thay vì:

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

thử:

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

này cố định vấn đề đối với tôi. Chúc may mắn.

+0

Tôi đã thử điều đó, nhưng nó không khắc phục được sự cố cho tôi. –

+0

Làm việc hoàn hảo cho tôi. Cảm ơn!!!!! – cw1998

5

Để khắc phục sự cố này, bạn phải mở rộng từ FragmentActivity thay vì Hoạt động trong FragsApplicationActivity.

3

Ngoại lệ android.view.InflateException: Binary XML file line: #... Error inflating class fragment có thể xảy ra nếu bạn thao tác với getActivity() bên trong đoạn của bạn trước khi onActivityCreated() được gọi. Trong trường hợp này, bạn nhận được một tham chiếu hoạt động sai và không thể dựa vào đó.

Ví dụ mô hình tiếp theo là sai:

@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

cách khắc phục điều này? – Mani

+1

@Mani Theo dõi http://stackoverflow.com/a/15137231/1338803 –

0

Hãy chắc chắn rằng android: name = "className" là tham số đầu tiên trong danh sách

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

tôi đã có cùng một vấn đề, để tóm tắt:

  • Mở rộng từ FragmentActivity
  • theo cấu trúc này trong cách bố trí của bạn

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

Hãy thử điều này

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