2017-04-20 126 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

相關問題