2013-03-05 1 views
1

Предположим, что у меня есть два вида деятельности. Один называется MainActivity, а другой называется PopupActivity. Я хочу иметь контекстное меню в MainActivity после посещения пользователем PopupActivity.Невозможно нажать «Параметры», если размер исходного меню равен нулю

Main [no menu] --> startActivity()/startActivityForResult() 
    ==> Popup --> back/finish() 
    ==> Main [now has menu]. 

детали окружающей среды:

  • minSDK: 10 (нужен для обратной совместимости)
  • targetSDK: 17
  • targetDevice: GalaxyTab 2,0

Если MainActivity имеет хотя бы один элемент в начальном состоянии, я могу добавить/remo v желаемые пункты меню через onPrepareOptionsMenu. Но если MainActiviy имеет 0 элементов меню внутри, андроид даже не отображает кнопку меню в верхнем правом углу.

Мой вопрос:

  • Что я пропустил?
  • Как сказать андроиду, чтобы отобразить кнопку меню, потому что я хочу добавить к нему пункты меню.

Обходные души не могут работать (например, разделение Деятельности на два и т. Д.), Потому что вся проблема немного сложнее, но суть этого в этом. Мне не нужны пункты меню в начальном состоянии, и я нуждаюсь в них во втором.

main_menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:id="@+id/menu_add" android:title="@string/add"></item>    
    <item android:id="@+id/menu_remove" android:title="@string/remove" ></item> 
</menu> 

MainActivity.java

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

@Override 
public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    if (initState) 
    { 
     menu.findItem(R.id.menu_add).setVisible(false); 
     menu.findItem(R.id.menu_remove).setVisible(false); 
    } else 
    { 
     menu.findItem(R.id.menu_add).setVisible(true); 
     menu.findItem(R.id.menu_remove).setVisible(true); 
    } 
    return super.onPrepareOptionsMenu(menu); 
} 

ответ

1

Сначала создадим два меню. один для начального этапа и второй для посещения PopupActivity.

Заменить Ваш onCreateOptionsMenu() с

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getMenuInflater(); 

    if (initState) 
     inflater.inflate(R.menu.invisible_main_menu, menu); 
    else 
     inflater.inflate(R.menu.visible_main_menu, menu); 

    return true; 
}