2013-04-19 2 views
12

Я просмотрел вопросы о переполнении стека и не могу найти решение.Попытка скрыть и показать пункты меню на панели действий

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.themenu, menu); 
    MenuItem item = menu.findItem(R.id.menu_settings); 
    MenuItem item2 = menu.findItem(R.id.menu_save); 
    item.setVisible(isdown); 
    item2.setVisible(isdown); 
    return true; 
} 

Это устанавливает пункты меню в видимые (item1 и item2). onclick отлично работает

public void inflateTextarea() { 
    if(isdown == true) { 
     isdown = false; 
     LinearLayout tl = (LinearLayout)findViewById(R.id.content); 
     tl.setVisibility(View.VISIBLE); 
     ScaleAnimation scale = new ScaleAnimation(1, 1, 0, 1); 
     scale.setFillAfter(true); 
     scale.setDuration(500); 
     tl.startAnimation(scale); 
    } 
} 

Тогда это устанавливает мой isdown булевым значением false. на стеке люди говорят, что onPrepareOptionsMenu должен стрелять каждый раз, когда я нажимаю, но это не так. Я могу скрыть один пункт меню на функции OnClick

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.menu_settings: 
      Log.v("Log:","edit_item pressed"); 
      return true; 
    } 
} 

Но у меня есть несколько пунктов меню, что мне нужно, чтобы скрыть и другие, которые я хочу показать. как я могу это сделать?

ответ

19

Его недостаточно для изменения переменной isDown. Вы должны вызвать метод setVisible() каждый раз, когда хотите изменить видимость. Этот метод не просто устанавливает логическое значение, поэтому простое изменение логического значения не будет выполняться.

После изменения значения isDown на значение false, вам необходимо позвонить invalidateOptionsMenu(), который заново запустит меню, снова позвонив onPrepareOptionsMenu().

Попробуйте этот код для создания пунктов меню незаметным:

... 
isdown = false; 
invalidateOptionsMenu(); 
... 
+0

да, я знаю это, но поскольку я читаю onPrepareOptionsMenu (меню меню) {должен срабатывать каждый раз, когда нажимается элемент меню, и это будет работать. Я не могу установить видимость, если у меня нет меню в функции, поэтому у меня есть проблема – Dnaso

+0

Я вижу. Отредактированный пост, чтобы охватить это. – tbkn23

+0

AHHH вот что я искал. Я постараюсь, если он плохо работает, признай спасибо. – Dnaso

11

Попробуйте это,

private Menu menu=null; 
@Override 
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) 
{ 
    inflater.inflate(R.menu.note_menu, menu); 
    this.menu=menu; 
super.onCreateOptionsMenu(menu,inflater); 
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown); 
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown); 
} 

Если вы хотите, чтобы скрыть меню в любом месте, после выполнения onCreateOptionsMenu() затем просто изменить значение isdown и повторите этот код,

menu.findItem(R.id.menu_settings).setVisible(isdown); 
menu.findItem(R.id.menu_save).setVisible(isdown); 
+0

Я слышал, что onPrepareOptionsMenu должен был быть лучше, знаете ли вы, в чем разница? – Dnaso

+0

ОК, так что теперь я могу поместить свой пункт menu.find в любую функцию в моем классе? – Dnaso

+0

Да, найдите пункт меню в любом месте на вашем классе и спрячьте/покажите ..! Вы проверяете это? –

0

Попробуйте это в FragmentActivity

public boolean onPreparePanel(int featureId, View view, Menu menu) { 
    if(isLeftMenuOpened()) return false; 
    return super.onPreparePanel(featureId, view, menu); 
} 

Метод FragmentActivity.onPreparePanel создает меню для всех присоединенных фрагментов. Вы должны вернуть true для отображаемого меню; если вы вернете false, оно не будет показано.

0

У меня есть меню с двумя пунктами, сначала: сохранить элемент, второе: отредактировать элемент. Я хотел, когда я пришел, чтобы редактировать, сначала «сохранить элемент» был скрыт, и когда я нажимаю «редактировать элемент», отображается «сохранить элемент».

Итак:

  1. объявить элемент в общественном
  2. заданного значения к нему в onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. набор видимость isHidden()
  4. тогда каждый, где я хотел, установить видимость isVisible()

Публичный регион:

MenuItem saveItem; 

onCreateOptionsMenu:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_detail_products, menu); 
    saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save); 
    saveItem.setVisible(isHidden()); 
} 

Где я хочу:

saveItem.setVisible(isVisible()); 

Наконец он работает, как я хотел.

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