2013-07-18 11 views

Odpowiedz

42
  1. Po wykonać akcję użytkownika, gdy chcesz wyłączyć pasek działań, ustaw jakąś flagę, powiedzmy disableButtonFlag.

  2. Zadzwoń pod invalidateOptionsMenu(). Spowoduje to wywołanie onCreateOptionsMenu w celu ponownego wygenerowania menu.

  3. Na koniec zmodyfikuj swój onCreateOptionsMenu, aby wyłączyć żądany przycisk w zależności od stanu disableButtonFlag.

    if (disableButtonFlag) { 
        menu.findItem(R.id.your_item).setEnabled(false); 
    } else { 
        menu.findItem(R.id.your_item).setEnabled(true); 
    } 
    

    Albo prościej:

    menu.findItem(R.id.your_item).setEnabled(!disableButtonFlag); 
    
+0

Ale potrzebuję ActionBar, mam wymagania dla aplikacji. Muszę nadal używać ActionBara i kiedy użytkownik dodaje jeden plik, muszę wyłączyć dodawanie kolejnych plików (przycisk do dodawania plików znajduje się w pasku akcji). – Mediha

+0

Przycisk wyłączony, edytowany. Założyłem, że usunięto pasek akcji, ogólnie to, co wyłącza pasek akcji, wydaje się sugerować ogólnie. – Slartibartfast

+0

To jest dokładnie to, co zrobiłem. Dziękuję Ci. – Mediha

0

można zrobić coś takiego:

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mainmenu, menu); 
    menu.findItem(R.id.your_item).setEnabled(false); 
    return super.onCreateOptionsMenu(menu); 
} 
+0

Ale powinien być włączony na początku, muszę wyłączyć później, po akcji użytkownika. Przeczytaj powyższy komentarz. Dzięki. – Mediha

+0

Po prostu utwórz atrybut 'Menu' w swojej aktywności i zainicjuj go w' onCreateOptionsMenu'. – Brtle

+0

Znalazłem sposób wywoływania invalidateOptionsMenu, ale w zasadzie było to. Dziękuję Ci. – Mediha

3

Dla programistów Androida, którzy są przy użyciu niestandardowego ActionBar czyli (Save & Anuluj przycisków akcji), próbowałem poniższy kod, żeby wyłączyć Anuluj przycisku akcji w następujący sposób:

Kod Java:

LayoutInflater inflater = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View actionBarButtons = inflater.inflate(
       R.layout.edit_event_custom_actionbar, new LinearLayout(this), 
       false); 

     View cancelActionView = actionBarButtons 
       .findViewById(R.id.action_cancel); 
     cancelActionView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     cancelActionView.setEnabled(false); 

     View doneActionView = actionBarButtons.findViewById(R.id.action_done); 
     doneActionView.setOnClickListener(new OnClickListener() { 

      @SuppressLint("NewApi") 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     getActionBar().setDisplayShowHomeEnabled(false); 
     getActionBar().setDisplayShowTitleEnabled(false); 
     getActionBar().setDisplayShowCustomEnabled(true); 
     this.getActionBar().setCustomView(actionBarButtons); 

edit_event_custom_actionbar.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="?attr/dividerVertical" 
    android:dividerPadding="12dp" 
    android:orientation="horizontal" 
    android:showDividers="middle" > 

    <!-- id must match corresponding menu item id --> 
<TextView 
    android:id="@+id/action_cancel" 
    style="@style/EditEventCustomActionButton" 
    android:text="@string/cancel_label" 
    android:drawableLeft="@drawable/ic_action_cancel" android:padding="5dp" /> 

    <!-- id must match corresponding menu item id --> 
<TextView 
    android:id="@+id/action_done" 
    style="@style/EditEventCustomActionButton" 
    android:text="@string/abc_action_mode_done" 
    android:drawableLeft="@drawable/abc_ic_cab_done_holo_dark" android:paddingRight="5dp" /> 

</LinearLayout> 

I dodać ten kod do swojej /values/styles.xml:

<style name="EditEventCustomActionButton" parent="android:style/Widget.Holo.Light.ActionButton"> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:layout_width">0dp</item> 
    <item name="android:layout_weight">1</item> 
    <item name="android:focusable">true</item> 
    <item name="android:textColor">#FFFFFF</item> 
</style> 
0

Prosta metoda, aby wyłączyć przycisk w akcji pasek jest zapisanie odniesienia do menu w onCreateOptionsMenu():

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu);  
    mMenu = menu; // Save reference 
    return super.onCreateOptionsMenu(menu); 
} 

a następnie zadzwonić setEnabled() na pozycji menu, aby włączyć lub wyłączyć:

mMenu.findItem(R.id.my_action_item).setEnabled(false); 

Nie ma potrzeby, aby ponownie utworzyć menu wywołując invalidateOptionsMenu().

Powiązane problemy