2015-04-29 2 views
0

Я следую за этим tutorial, и я пишу простой Activity.onOptionsItemSelected никогда не называется

...

UPDATE: После того, как ваши советы Я редактировал мое приложение, но метод onOptionsItemSelected() все еще не вызывается, когда я выбираю пункт из всплывающего меню. Всплывающее меню раздувается, когда пользователь нажимает на элемент из панели действий.

Активность:

public class Map extends AppCompatActivity implements 
    GoogleMap.OnMapLongClickListener, GoogleMap.OnMarkerClickListener, 
    GoogleMap.OnMapClickListener, OnMapReadyCallback, 
    ResourceState.OnResourceStateChangeListener { 

... 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     ... 

     case R.id.menu_item_map_type: 
      // Here I show the popup 
      PopupMenu popup = new PopupMenu(this, findViewById(R.id.menu_item_map_type)); 
      popup.getMenuInflater().inflate(R.menu.map_popup, popup.getMenu()); 
      popup.show(); 
      break; 

     case R.id.menu_item_satellite: 
      // here the method onOptionsItemSelected is not directly called 
      break; 

     case R.id.menu_item_street: 
      // here the method onOptionsItemSelected is not directly called 
      break; 
    } 

    return super.onOptionsItemSelected(item); 
} 

public void callOnOptionsItemSelected(MenuItem item) { 
    onOptionsItemSelected(item); 
} 

... 

}

Основное меню:

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

    <item android:id="@+id/menu_item_send" 
      android:icon="@drawable/ic_send" 
      android:title="send" 
      app:showAsAction="ifRoom"/> 

    <item android:id="@+id/menu_item_location" 
      android:icon="@drawable/ic_location_on" 
      android:title="my position" 
      app:showAsAction="ifRoom"/> 

    <item android:id="@+id/menu_item_map_type" 
      android:icon="@drawable/ic_map" 
      android:title="map view" 
      app:showAsAction="ifRoom"/> 

</menu> 

всплывающее меню:

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

    <item 
     android:id="@+id/menu_item_satellite" 
     android:title="satellite" 
     android:checkable="true" 
     android:onClick="callOnOptionsItemSelected"/> 

    <item 
     android:id="@+id/menu_item_street" 
     android:title="street" 
     android:checkable="true" 
     android:onClick="callOnOptionsItemSelected" /> 

</menu> 

Мое временное решение является определение метода callOnOptionsItemSelected(), который называет метод onOptionsItemSelected(). Кстати, я хотел бы знать, чего мне не хватает.

(Другой вопрос, связанный с всплывающим окном, что метод setChecked() класса MenuItem, не работает.)

+0

Возможно, проблема в том, что вы не проверяете, является ли элемент вашей кнопкой (item.getItemId() == R.id.sat), затем выполните item.setChecked (true), а затем верните true. В приведенном ниже учебном пособии говорится, что «Когда вы успешно обрабатываете элемент меню, возвращайте true. Если вы не обрабатываете элемент меню, вы должны вызывать реализацию суперкласса onOptionsItemSelected() (реализация по умолчанию возвращает false)». в разделе «Обработка событий кликов». –

+0

@frenk Я запустил ваш тестовый код, а onOptionsItemSelected получил название просто отлично. У вас есть библиотека, которая также использует Log.d? Возможно, вы импортировали неправильный Log.d, и поэтому он не отображается в консоли. – WindsurferOak

+0

Я изменил код, как вы предлагаете, но ничего не изменилось. – optimusfrenk

ответ

-2

Я не знаю, почему вы добавляете

android:id="@+id/layout_map_popup" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 

в вашем menu.xml файле

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