2016-05-25 129 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

相关问题