2012-11-12 14 views

risposta

35

è possibile ottenere la visualizzazione tramite la voce di menu id, ottenendo in onOptionsItemSelected ..

findViewById(R.id.menu_item); 
+1

No questo non funziona Ho provato prima di tutto e restituisce solo un puntatore nullo. Ma poi non me lo aspetterei comunque poiché l'elemento sulla barra delle azioni è un MenuItem che non sembra essere una vista. Quindi sto cercando di ottenere la Vista all'interno di quel MenuItem – Kyros

+0

dipende da dove la stai chiamando, dovresti chiamarla all'interno dell'attività per ottenere la vista e poi passarla alla tua finestra popup. Funziona per me – Nermeen

+0

Ho provato a trovare il visualizza in OnCreate, dove lo chiami? – Kyros

32

findViewById non deve essere eseguito su onOptionsItemSelected al fine di ottenere la vista del elemento di azione.

tuttavia, si noti che a volte le voci di azione possono trovarsi nel menu di overflow in modo da ottenere invece un valore nullo.

quindi, come si può fare?

ecco un esempio di codice:

public boolean onCreateOptionsMenu(final Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.main, menu); 
    new Handler().post(new Runnable() { 
    @Override 
    public void run() { 
     final View menuItemView = findViewById(R.id.menu_action_item); 
     ... 

questo è stato testato durante l'uso della libreria ActionBarSherlock, su Android 4.1.2 e Android 2.3.5.

un'altra alternativa è utilizzare un modo più esteso, utilizzato su showcaseView library, here.

+0

Conosci qualche buon metodo per farlo senza usare librerie di terze parti? –

+0

sì, fai lo stesso senza usare actionBarSherlock. qualcosa che ho provato, questa libreria mostra la normale barra di azione nativa nel caso in cui la versione di Android sia 3.0 e superiore .. –

+8

Usando questo anche sto ottenendo vista nulla – ingsaurabh

-1

Ogni dove chiamata:

activity.findViewById(R.id.menu_item); 

Se il codice all'interno frammento non utilizzare:

getView().findViewById(R.id.menu_item); 

Si tornerà nulla.

+0

non funziona. ger riferimento null –

1

mi capita di incontrare questo problema pure, findViewById deve essere lavorato al mio fianco, ecco il codice di esempio:

private void setDrawable(final Menu menu) { 
    if (menu == null || menu.size() == 0) return; 

    Utils.postToUiHandler(new Runnable() { 
     @Override 
     public void run() { 
      int size = menu.size(); 
      for (int i = 0; i < size; i++) { 
       MenuItem menuItem = menu.getItem(i); 
       if (menuItem != null) { 
        View view = activity.findViewById(menuItem.getItemId()); 
        if (view != null) { 
         Drawable drawable = ThemeDrawables.get(ThemeWorker.Segment.DEFAULT).actionbarButton(); 
         if (drawable != null && view.getBackground() != drawable) { 
          int sdk = android.os.Build.VERSION.SDK_INT; 
          if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
           view.setBackgroundDrawable(drawable); 
          } else { 
           view.setBackground(drawable); 
          } 
         } 

        } 
       } 
      } 
     } 
    }); 

} 

Si prega di notare, faccio findViewById nel thread UI come menuitem' vista non è gonfiato in modo il dovrebbe essere in esecuzione nel thread dell'interfaccia utente

Problemi correlati