2016-05-25 91 views
0

我一直在關注Udacity的「開發Android應用程序」課程,我偶然發現了一個問題。在教程,我被要求創建一個名爲forecastfragment.xml一個XML文件,它是低於:Android.view.InflateException:二進制XML文件行#1:錯誤膨脹類菜單

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.example.android.sunshine.app.MainActivity" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <item 
     android:id="@+id/action_refresh" 
     android:title="@string/action_refresh" 
     app:showAsAction="never" /> 
</menu> 

而且我告訴它膨脹到從一個叫ForecastFragment.java類,它發生在這條線的過程的片段:

View rootView = inflater.inflate(R.layout.forecastfragment, container, false);

我的問題是,當我嘗試運行應用程序,我得到這個錯誤:

05-24 21:40:02.848 11882-11882/com.example.android.sunshine.app E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.android.sunshine.app, PID: 11882 
                        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.sunshine.app/com.example.android.sunshine.app.MainActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class menu 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2431) 
                         at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342) 
                         at android.os.Handler.dispatchMessage(Handler.java:110) 
                         at android.os.Looper.loop(Looper.java:193) 
                         at android.app.ActivityThread.main(ActivityThread.java:5335) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
                         at dalvik.system.NativeStart.main(Native Method) 
                        Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class menu 
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                         at com.example.android.sunshine.app.ForecastFragment.onCreateView(ForecastFragment.java:34) 
                         at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1036) 
                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230) 
                         at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1332) 
                         at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2288) 
                         at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120) 
                         at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:356) 
                         at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31) 
                         at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) 
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
                         at android.view.LayoutInflater.parseInclude(LayoutInflater.java:816) 
                         at android.view.LayoutInflater.rInflate(LayoutInflater.java:745) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                         at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                         at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                         at com.example.android.sunshine.app.MainActivity.onCreate(MainActivity.java:17) 
                         at android.app.Activity.performCreate(Activity.java:5343) 
                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2431)  
                         at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)  
                         at android.os.Handler.dispatchMessage(Handler.java:110)  
                         at android.os.Looper.loop(Looper.java:193)  
                         at android.app.ActivityThread.main(ActivityThread.java:5335)  
                         at java.lang.reflect.Method.invokeNative(Native Method)  
                         at java.lang.reflect.Method.invoke(Method.java:515)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)  
                         at dalvik.system.NativeStart.main(Native Method)  
                        Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.menu" on path: DexPathList[[zip file "/data/app/com.example.android.sunshine.app-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.android.sunshine.app-2, /vendor/lib, /system/lib]] 
                         at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
                         at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
                         at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
                         at android.view.LayoutInflater.createView(LayoutInflater.java:559) 
                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:652) 
                         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:469)  
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  
                         at com.example.android.sunshine.app.ForecastFragment.onCreateView(ForecastFragment.java:34)  
                         at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)  
                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1036)  
                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230)  
                         at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1332)  
                         at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2288)  
                         at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)  
                         at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:356)  
                         at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31)  
                         at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)  
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)  
                         at android.view.LayoutInflater.parseInclude(LayoutInflater.java:816)  
                         at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)  
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:353)  
                         at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)  
                         at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)  
                         at com.example.android.sunshine.app.MainActivity.onCreate(MainActivity.java:17)  
                         at android.app.Activity.performCreate(Activity.java:5343)  
                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)  
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)  
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2431)  
                         at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)  
                         at android.os.Handler.dispatchMessage(Handler.java:110)  
                         at android.os.Looper.loop(Looper.java:193)  
                         at android.app.ActivityThread.main(ActivityThread.java:5335)  
                         at java.lang.reflect.Method.invokeNative(Native Method)  
                         at java.lang.reflect.Method.invoke(Method.java:515)  

從行:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.sunshine.app/com.example.android.sunshine.app.MainActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class menu

我猜測,這個問題是在XML文件中,但我不明白,這可能是錯誤的,因爲沒有任何錯誤拋出。我在想,因爲我是新手,這可能是一個簡單的錯誤。有誰知道爲什麼?非常感謝你提前

+0

我希望是的,但就我所知,我沒有加載任何圖像的簡單菜單 – gfcf14

回答

1

上面提到的xml文件是一個菜單文件。它用於向您添加菜單項操作欄

所以它不能作爲你的碎片佈局文件充氣。首先你需要爲你的片段創建一個佈局文件。

然後您需要爲操作欄充氣forecastfragment.xml作爲菜單。

遵循以下步驟:

1.創建一個正常的佈局xml文件說sample.xml中內/ RES /佈局/通過寫下面的代碼行onCreateView誇大它爲您的片段:

View rootView = inflater.inflate(R.layout.sample, container, false); 

2.然後重寫功能:onCreateOptionsMenu(菜單菜單),那 裏面,你會虛增您forecastfragment.xml這樣的:

getMenuInflater().inflate(R.menu.forecastfragment, menu); 
    return true; 

同時添加以下代碼行中的片段的的onCreate方法:

setHasOptionsMenu(true); 

一件事:將forecastfragment.xml內/ RES /菜單文件夾。

+0

現在這是一個答案。非常感謝!我實際上一直在處理我的問題,並且偶然發現了同樣的問題。正如你所說,我使用菜單作爲佈局(我實際上在佈局文件夾下有'forecastfragment.xml'!),並且無論如何都不會出現Refresh菜單項,因爲我從不讓應用程序知道片段有選項菜單,我從來沒有重寫'onCreateOptionsMenu'。非常感謝你的幫助!! – gfcf14

相關問題