2015-05-29 1 views
1

Я реализую материальный дизайн для своего приложения. Я заменил собственный ActionBar новой панелью инструментов Android. Элементы меню добавляются, 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) 

Также я использую последнюю версию AppCompat библиотеки. Я следил за учебниками, googled, но ничего не найдено. В чем причина этого краха? Пожалуйста помоги.

ответ

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, затем удалите его

 Смежные вопросы

  • Нет связанных вопросов^_^