2017-04-20 128 views
1

我试图添加产品的子菜单和应用程序崩溃在开始。问题来自创建的子菜单。我不明白为什么。Android - 应用程序崩溃,当我添加子菜单

NavigationMenu.xml

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

    <item android:id="@+id/nav_home" 
     android:title="Home" /> 

     <item android:title="Products" 
      android:id="@+id/nav_products"> 
      <menu> 

       <item android:id="@+id/nav_tubeBendingMachines" 
        android:title="Tub" /> 

       <item android:id="@+id/nav_sectionBendingRolls" 
        android:title="Sect" /> 

      </menu> 
     </item> 


    <item android:id="@+id/nav_tube_data" 
     android:title="Tube Data" /> 

    <item android:id="@+id/nav_tool_setup" 
     android:title="Tool Setup" /> 

    <item android:id="@+id/nav_mandrel" 
     android:title="Mandrel" /> 

    <item android:id="@+id/nav_archive" 
     android:title="Archive" /> 

    <item android:id="@+id/nav_tool_notes" 
     android:title="Tool Notes" /> 

    <item android:id="@+id/nav_converter" 
     android:title="Converter" /> 

    <item android:id="@+id/nav_bend_guide" 
     android:title="Bend Guide" /> 

    <item android:id="@+id/nav_contact" 
     android:title="Contact Us" /> 

    <item android:id="@+id/nav_settings" 
     android:title="Settings" 
     android:icon="@mipmap/ic_settings_black_24dp"/> 


    </menu> 

主要

public class MainActivity extends AppCompatActivity { 

//Side menu 
private DrawerLayout mDrawerLayout; 
//button side menu 
private ActionBarDrawerToggle mToggle; 

//toolbar 
private Toolbar mToolbar; 

//Fragments 
FragmentTransaction fragmentTransaction; 

NavigationView navigationView; 



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

    mToolbar = (Toolbar) findViewById(R.id.nav_action); 
    setSupportActionBar(mToolbar); 


    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
    mToggle = new ActionBarDrawerToggle(this,mDrawerLayout, R.string.open,R.string.close); 

    mDrawerLayout.addDrawerListener(mToggle); 
    mToggle.syncState(); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    //fragments transaction 
    fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.main_container,new HomeFragment()); 
    fragmentTransaction.commit(); 
    getSupportActionBar().setTitle("Home"); 

    //select which fragment to show based on item id 
    navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      switch (item.getItemId()) 
      { 
       case R.id.nav_home: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new HomeFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Home"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_settings: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new SettingsFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Settings"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_contact: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new ContactUsFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Contact Us"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_tube_data: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new TubeDataFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Tube Data"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_archive: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new ArchiveFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Archive"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_bend_guide: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new BendGuideFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Bend Guide"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_mandrel: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new MandrelFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Mandrel"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_tool_setup: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new ToolSetupFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Tool Setup"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 

       case R.id.nav_products: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container,new ProductsFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Products"); 
        item.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
        break; 





      } 
      return true; 
     } 
    }); 

    } 
//toggle para o menu 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(mToggle.onOptionsItemSelected(item)) 
     { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

崩溃日志:

04-20 10:40:45.923 6040-6040/com.example.tiagosilva.amob_android E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.tiagosilva.amob_android, PID: 6040 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tiagosilva.amob_android/com.example.tiagosilva.amob_android.MainActivity}: android.view.InflateException: Binary XML file line #38: Binary XML file line #38: Error inflating class android.support.design.widget.NavigationView 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: android.view.InflateException: Binary XML file line #38: Binary XML file line #38: Error inflating class android.support.design.widget.NavigationView 
Caused by: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.design.widget.NavigationView 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Constructor.newInstance0(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:645) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
    at com.example.tiagosilva.amob_android.MainActivity.onCreate(MainActivity.java:34) 
    at android.app.Activity.performCreate(Activity.java:6679) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: java.lang.ClassCastException: android.support.design.internal.NavigationMenuPresenter$NavigationMenuSeparatorItem cannot be cast to android.support.design.internal.NavigationMenuPresenter$NavigationMenuTextItem 
    at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.appendTransparentIconIfMissing(NavigationMenuPresenter.java:540) 
    at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.java:527) 
    at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.update(NavigationMenuPresenter.java:460) 
    at android.support.design.internal.NavigationMenuPresenter.updateMenuView(NavigationMenuPresenter.java:117) 
    at android.support.design.widget.NavigationView.inflateMenu(NavigationView.java:252) 
04-20 10:40:45.923 6040-6040/com.example.tiagosilva.amob_android E/AndroidRuntime:  
    at android.support.design.widget.NavigationView.<init>(NavigationView.java:174) 
    at android.support.design.widget.NavigationView.<init>(NavigationView.java:100) 
     ... 25 more 

XXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXxXXXXXXXXXXXx

+2

请添加编辑崩溃日志 – Passiondroid

+0

。检查我的编辑 – adiajdiadj

+0

你可以把你的菜单XML文件与完整的代码? –

回答

2

产生的原因:android.view.InflateException: Binary XML file line #38: Binary XML file line #38: Error inflating clas小号 android.support.design.widget.NavigationView

造成的: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.design.widget.NavigationView

原因:

的问题是在你的NavigationMenu.xml。项目nav_settings导致InflateException。发生这种情况的原因是itemicon但上面的items没有icons而你没有grouped它们在一起。

SOLUTION:

为了解决这个InflateException,把菜单项nav_tube_datanav_contactgroup和也你必须给一个idgroup

这里是工作的XML代码:

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

    <item android:id="@+id/nav_home" 
     android:title="Home" /> 

    <item android:title="Products" 
     android:id="@+id/nav_products"> 
     <menu> 
      <item android:id="@+id/nav_tubeBendingMachines" 
       android:title="Tub" /> 

      <item android:id="@+id/nav_sectionBendingRolls" 
       android:title="Sect" /> 
     </menu> 
    </item> 

    <group 
     android:checkableBehavior="none" 
     android:id="@+id/group_one"> 

     <item android:id="@+id/nav_tube_data" 
      android:title="Tube Data" /> 

     <item android:id="@+id/nav_tool_setup" 
      android:title="Tool Setup" /> 

     <item android:id="@+id/nav_mandrel" 
      android:title="Mandrel" /> 

     <item android:id="@+id/nav_archive" 
      android:title="Archive" /> 

     <item android:id="@+id/nav_tool_notes" 
      android:title="Tool Notes" /> 

     <item android:id="@+id/nav_converter" 
      android:title="Converter" /> 

     <item android:id="@+id/nav_bend_guide" 
      android:title="Bend Guide" /> 

     <item android:id="@+id/nav_contact" 
      android:title="Contact Us" /> 
    </group> 

    <item android:id="@+id/nav_settings" 
     android:title="Settings" 
     android:icon="@drawable/ic_settings_black_24dp"/> 

</menu> 

OUTPUT:

enter image description here

一个建议,不要把你的资源iconsmipmap文件夹中。 mipmap只适用于launcher图标。对于其他resource图标,您应该使用drawable文件夹。

UPDATE:

我想点击Products和它去表示与Products所有 项目的页面。没有办法使产品clickable 像首页等其他项目...?

试试这个:

.................. 
    ............................. 
    <group 
     android:checkableBehavior="none" 
     android:id="@+id/group_two"> 

     <item android:title="Products" 
      android:id="@+id/nav_products" /> 

     <item android:id="@+id/nav_tubeBendingMachines" 
      android:title="Tub" /> 

     <item android:id="@+id/nav_sectionBendingRolls" 
      android:title="Sect" /> 
    </group> 
    ................ 
    ....................... 

希望这将有助于〜

+0

@adiajdiadj如果我的回答似乎有用,请给予upvote。阅读http://stackoverflow.com/help/someone-answers – FAT

+0

感谢您的帮助。我的问题是产品不再可点击。任何想法为什么? – adiajdiadj

+0

产品是标题而不是菜单 – FAT

相关问题