2013-07-18 24 views

risposta

42
  1. Una volta che si esegue l'azione dell'utente quando si desidera disattivare la barra delle azioni, impostare alcuni bandiera, dicono disableButtonFlag.

  2. Chiama invalidateOptionsMenu(). Questo attiverà onCreateOptionsMenu da invocare per rigenerare il tuo menu.

  3. Infine modificare il onCreateOptionsMenu per disattivare il pulsante desiderato in base allo stato di disableButtonFlag.

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

    O più semplicemente:

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

Ma ho bisogno di ActionBar, ho i requisiti per l'applicazione. Devo continuare ad usare ActionBar e quando l'utente aggiunge un file devo disabilitare l'aggiunta di altri file (il pulsante per aggiungere file è in ActionBar). – Mediha

+0

Oh pulsante di disabilitazione, modificato. Ho pensato di rimuovere la barra delle azioni, generalmente ciò che disabilita la barra delle azioni sembra implicare genericamente. – Slartibartfast

+0

Questo è esattamente quello che ho fatto. Grazie. – Mediha

0

si può fare qualcosa di simile:

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

Ma dovrebbe essere abilitato all'inizio, ho bisogno di disabilitare in seguito, dopo l'azione dell'utente. Si prega di leggere il commento sopra. Grazie. – Mediha

+0

Basta creare un attributo 'Menu' nella tua attività e inizializzarlo nel' onCreateOptionsMenu'. – Brtle

+0

Ho trovato il modo in cui chiamare invalidateOptionsMenu, ma fondamentalmente era questo. Grazie. – Mediha

3

Per gli sviluppatori di Android che utilizzano un costume ActionBar cioè (Save & Annulla pulsanti di azione), ho provato il seguente codice per disattivare Annulla pulsante di azione come segue:

codice 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> 

E aggiungere il codice al tuo /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

Un metodo semplice per disabilitare un tasto nell'azione barra è di salvare un riferimento al menu in onCreateOptionsMenu():

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

e quindi chiamare setEnabled() sulla voce di menu per attivare o disattivare:

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

Non c'è bisogno di ri-creare il menu chiamando invalidateOptionsMenu().

Problemi correlati