2013-04-19 8 views
12

Przejrzałem pytania dotyczące przepełnienia stosu i nie mogę znaleźć rozwiązania.Próba ukrycia i wyświetlenia pozycji menu na pasku działań

@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; 
} 

Powoduje to ustawienie pozycji menu na widoczną (pozycja 1 i pozycja 2). onclick działa dobrze

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); 
    } 
} 

W ten sposób ustawia się wartość logiczną isin na false. na stosie ludzie mówią, że onPrepareOptionsMenu powinien uruchamiać się za każdym razem, gdy kliknę, ale tak nie jest. jestem w stanie ukryć jedną pozycję menu w funkcji onclick

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

Ale mam kilka pozycji menu, że muszę ukrywać i innym, że chcę pokazać. jak mogę to zrobić?

Odpowiedz

19

Nie wystarczy, aby zmienić zmienną isDown. Za każdym razem, gdy chcesz zmienić widoczność, musisz wywoływać metodę setVisible(). Ta metoda nie polega wyłącznie na ustawianiu wartości boolowskiej, więc samo zmienianie wartości logicznej nie będzie możliwe.

Po zmianie wartości isDown na wartość false należy wywołać invalidateOptionsMenu(), która ponownie uruchomi menu, ponownie wywołując numer onPrepareOptionsMenu().

Spróbuj tego kodu do tworzenia elementów menu unvisible:

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

tak Wiem, ale jak czytam na onPrepareOptionsMenu (menu menu) {ma odpalać za każdym razem, gdy kliknięto element menu i TO działało. Nie mogę ustawić widoczności, chyba że mam menu Menu w funkcji, więc tam właśnie mam problem. – Dnaso

+0

Rozumiem. Zmieniono post, aby to uwzględnić. – tbkn23

+0

AHHH to było to, czego szukałem. Spróbuję, jeśli to działa źle, dziękuję. – Dnaso

11

Spróbuj tego,

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); 
} 

Gdy chcesz ukryć menu w każdym przypadku, gdy po wykonaniu onCreateOptionsMenu() potem po prostu zmienić wartość isdown i powtórz ten kod,

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

Słyszałem, że onPrepareOptionsMenu miało być lepsze, czy wiesz jaka jest różnica? – Dnaso

+0

ok, więc teraz mogę umieścić mój element menu.find w dowolnej funkcji w mojej klasie? – Dnaso

+0

tak, znajdź pozycję menu w dowolnym miejscu na swojej klasie i ukryj/pokaż ...!, Sprawdzasz to? –

0

Spróbuj tego w FragmentActivity

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

Metoda FragmentActivity.onPreparePanel tworzy menu dla wszystkich dołączonych fragmentów. Musisz zwrócić wartość true, aby menu mogło być wyświetlane; jeśli zwrócisz wartość false, nie będzie ona wyświetlana.

0

Mam menu z dwoma przedmiotami, najpierw: zapisz element, drugi: edytuj przedmiot. Gdy chciałem wejść do edycji, chciałem, aby "save item" został ukryty, a kiedy kliknę "edit item", wyświetli się "save item".

Więc:

  1. zadeklarować pozycję w publicznym
  2. zadanej wartości do niej onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. zestaw widoczność isHidden()
  4. następnie co gdzie chciałem ustawić widoczność do isVisible()

Region publiczny:

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()); 
} 

gdzie chcę:

saveItem.setVisible(isVisible()); 

końcu działa jak chciałem.

Powiązane problemy