2015-05-29 57 views
1

我正在实施材料设计到我的应用程序。我用新的android工具栏替换了原生ActionBar。菜单项被添加,onOptionsItemSelected完美工作。但是当我点击溢出图标或具有更多菜单项的项目时,应用程序崩溃。android:应用程序崩溃在工具栏溢出菜单上点击

工具栏截屏:https://www.dropbox.com/s/smay4k1qwkd8amz/Screenshot_2015-05-29-11-31-55.png?dl=0

activity_main.xml中

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

    <android.support.v7.widget.Toolbar 
      android:id="@+id/app_bar" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="?attr/actionBarSize" 
      android:background="@color/my_primary" 
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

    </android.support.v7.widget.Toolbar> 

    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Hello World, MyActivity" 
      /> 
</LinearLayout> 

styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <style name="AppTheme" parent="AppTheme.Base"> 

    </style> 

    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="colorPrimary">@color/my_primary</item> 
     <item name="colorPrimaryDark">@color/my_primary_dark</item> 
     <item name="colorAccent">@color/my_accent</item> 
    </style> 

</resources> 

MyActivity.java

public class MyActivity extends ActionBarActivity { 
    private Toolbar toolbar; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     toolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(toolbar); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
} 

菜单\ main.xml中

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

    <item 
      android:id="@+id/action_add" 
      android:title="Add" 
      android:icon="@android:drawable/ic_menu_add" 
      Compat:showAsAction="always"/> 

    <item 
      android:title="Items" 
      android:icon="@android:drawable/ic_menu_agenda" 
      Compat:showAsAction="always" 
      > 
     <menu> 
      <item 
        android:id="@+id/action_1" 
        android:title="item1"/> 
      <item 
        android:id="@+id/action_2" 
        android:title="item2"/> 
     </menu> 
    </item> 

    <item 
      android:id="@+id/action_about" 
      android:title="About" 
      android:icon="@android:drawable/ic_menu_help" 
      Compat:showAsAction="never"/> 

</menu> 

下列消息后坠毁所示:

05-29 11:21:18.012 31469-31469/com.example.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.myapp, PID: 31469 
    java.lang.NoSuchFieldError: No static field title of type I in class Landroid/support/v7/appcompat/R$id; or its superclasses (declaration of 'android.support.v7.appcompat.R$id' appears in /data/app/com.example.myapp-1/base.apk) 
      at android.support.v7.internal.view.menu.ListMenuItemView.onFinishInflate(ListMenuItemView.java:89) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:814) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
      at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:370) 
      at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:219) 
      at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:153) 
      at android.support.v7.widget.ActionMenuPresenter$OpenOverflowRunnable.run(ActionMenuPresenter.java:752) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5293) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 

而且我使用程序兼容性库的最后一个版本。我遵循教程,使用Google搜索,但没有发现任何内容。这次事故的原因是什么?请帮忙。

回答

0

这里阅读.. http://developer.android.com/guide/topics/ui/menus.html 您刚才创建菜单,你没有提供其功能。换句话说,你只是夸大屏幕上的菜单,而不是提供功能,如果使用点击它会做什么。 要启用它们,您需要执行以下方法,例如

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// Handle item selection 
switch (item.getItemId()) { 
    case R.id.new_game: 
     newGame(); 
     return true; 
    case R.id.help: 
     showHelp(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
} 
} 

您的mainActivity中。

+0

谢谢您的回应。但我已经写了onOptionsItemSelected工作正常。我只是没有在上面的代码中写这个方法。当必须创建弹出菜单时它崩溃,例如当我点击溢出图标时。 –

+0

我亲自运行这个项目,并没有崩溃。我没有做任何改变。你还有同样的问题吗? –

+0

如果你仍然有问题..让我知道..生病发布整个项目,我已经测试和运行,并没有崩溃时,我点击溢出图标。 –

0

如果您正在使用trasitive = false;在build.gradle然后删除它

相关问题