2013-02-12 61 views
1

我有一個活動,將包含三個片段兩個有listView佈局和一個有相對佈局。爲什麼我不能在Android中膨脹我的碎片?

這是該活動的XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id = "@+id/activity_main_large" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" xmlns:tools="http://schemas.android.com/tools"> 

    <fragment 
     android:id="@+id/menu_category_fragment" 
     android:name="com.thesis.menubook.MenuCategory" 
     android:layout_width="123dp" 
     android:layout_height="match_parent" 
     tools:layout="@layout/activity_menu_category" /> 

    <fragment 
     android:id="@+id/menu_fragment" 
     android:name="com.thesis.menubook.MenuFragment" 
     android:layout_width="0dip" 
     android:layout_height="match_parent" 
     android:layout_weight="0.35" 
     tools:layout="@layout/activity_menu_fragment" /> 

    <fragment 
     android:id="@+id/orderlist_fragment" 
     android:name="com.thesis.menubook.OrderListFragment" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="0.08" 
     tools:layout="@layout/activity_order_list" /> 

</LinearLayout> 

這裏是主要的活動

package com.thesis.menubook; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 


public class MenuMain extends Activity { 

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

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.layout.activity_menu_main, menu); 
     return true; 
    } 

} 

有,所以我只是試圖加載空片段,看看java文件,他們會實際加載,然後添加小部件和代碼以將數據導入到片段中。但我得到一個錯誤說java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thesis.menubook/com.thesis.menubook.MenuMain}:

有什麼我忽略這就是爲什麼它不能加載空片段?

這裏是我的logcat(修正類名後更新):

02-12 23:04:28.369: E/AndroidRuntime(1143): FATAL EXCEPTION: main 
02-12 23:04:28.369: E/AndroidRuntime(1143): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thesis.menubook/com.thesis.menubook.MenuMain}: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.ActivityThread.access$1500(ActivityThread.java:122) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.os.Looper.loop(Looper.java:132) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.ActivityThread.main(ActivityThread.java:4025) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at java.lang.reflect.Method.invoke(Method.java:491) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at dalvik.system.NativeStart.main(Native Method) 
02-12 23:04:28.369: E/AndroidRuntime(1143): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.view.LayoutInflater.inflate(LayoutInflater.java:391) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.view.LayoutInflater.inflate(LayoutInflater.java:347) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:223) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.Activity.setContentView(Activity.java:1780) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at com.thesis.menubook.MenuMain.onCreate(MenuMain.java:15) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  ... 11 more 
02-12 23:04:28.369: E/AndroidRuntime(1143): Caused by: java.lang.ClassCastException: com.thesis.menubook.MenuCategory cannot be cast to android.app.Fragment 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.Fragment.instantiate(Fragment.java:493) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.Fragment.instantiate(Fragment.java:468) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.app.Activity.onCreateView(Activity.java:4132) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664) 
02-12 23:04:28.369: E/AndroidRuntime(1143):  ... 20 more 
02-12 23:04:28.905: D/dalvikvm(1143): GC_CONCURRENT freed 329K, 6% free 7390K/7815K, paused 12ms+20ms 
02-12 23:04:34.180: I/Process(1143): Sending signal. PID: 1143 SIG: 9** 

MenuCategory.java

包com.thesis.menubook;

import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;

公共類MenuCategory延伸片段{ @覆蓋 公共視圖onCreateView(LayoutInflater充氣,容器的ViewGroup, 捆綁savedInstanceState){

 View view = inflater.inflate(R.layout.activity_menu_category, container, false); 
     return view; 
} 

}

MenuFragment.java

package com.thesis.menubook; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class MenuFragment extends Fragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

      View view = inflater.inflate(R.layout.activity_menu_fragment, container, false); 
      return view; 
     } 


    } 

OrderListFragment.java

package com.thesis.menubook; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class OrderListFragment extends Fragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_order_list, container, false); 
     return view; 
    } 
} 

下面是XML文件的片段:

activity_menu_category

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


</ListView> 

activity_menu_fragment

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout android:layout_width="match_parent" 
    android:layout_height="match_parent" android:gravity="bottom|top" xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp"> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/hello_world" 
     android:paddingTop="20dp" /> 

</RelativeLayout> 

activity_order_list

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

    <!-- Name Label --> 
    <TextView 
     android:id="@+id/categoryname" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="6dip" 
     android:paddingLeft="6dip" 
     android:textSize="20sp" 
     android:textStyle="bold" /> 
</LinearLayout> 

回答

2

這裏是你的答案

Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.android.fragments.MenuCategory: make sure class name exists, is public, and has an empty constructor that is public 

請確保您有默認/空public構造函數MenuCategory,也確保MenuCategory不是一個內部類,如果是,那麼它應該是publicstatic

1

您的項目中有MenuCategory,MenuFragment,OrderListFragment類嗎?如果是這樣,你有他們在一個叫com.example.android.fragments包?如果你有這些類,但是你把它們放在你自己的包中,你需要將xml佈局中的包名改爲你自己的包,而不是com.example。

+0

我的確有他們在我的項目中。所以我需要建立一個新的文件夾並將其命名爲它然後將它們放在所述文件夾中? – 2013-02-12 14:36:12

+0

你可以做到這一點,但你應該改變'com.example.android.fragments'到'com.thesis.menubook'在你的佈局xml文件中。 – FoamyGuy 2013-02-12 14:37:08

+0

我在xml文件中看到了它們,並對它們進行了更改,但它仍然有相同的錯誤 – 2013-02-12 14:41:28

0

答案是正確的,在錯誤消息:

無法實例片段com.example.android.fragments.MenuCategory

你必須在你的項目中,一類,它的全名是com.example.android.fragments.MenuCategory,這是片段的一個子類,並且有一個無參數的構造

編輯補充:

在佈局標籤:

<fragment 
     android:id=blah blah blah 
     android:name="com.thesis.menubook.MenuCategory" 

...你叫一個Java類。在你的例子中,它是「com.thesis.menubook.MenuCategory」。正如我所說,這個類必須存在於你的項目中,擴展Fragment,並且有一個無參數構造函數(實際上,你不應該給任何構造函數,所以它只有它的默認構造函數)。對於每個片段標籤,您必須擁有這樣一個類,對應於每個android:name屬性的值。

+0

我將它更改爲com.thesis.menubook.MenuCategory,它仍然具有相同的錯誤 – 2013-02-12 14:55:55

3

您正在使用錯誤的Fragment類。您正在使用支持庫碎片android.support.v4.app.Fragment。它期望本地框架實​​現:android.app.Fragment

如果您要使用支持庫,要啓用舊版本,您的活動需要延長android.support.v4.app.FragmentActivity。然後,您將使用getSupportFragmentManager()方法獲取FragmentManager並添加片段。

+0

令人驚歎。所有其他答案都完全沒有提到這一點,並給出一些通用的建議。這是一個現貨 - 但它是最後一個,甚至沒有upvoted。 – fdreger 2015-06-11 13:41:04

0

1)您應該在Anroidmanifest.xml中將minSdkVersion的值更改爲11。 2)檢查mainactivity.xml中定義的片段的名稱值是否正確,即packagename.Fragmentclassname。

相關問題