2011-12-23 15 views
39

Ho intenzione di utilizzare il modello dell'interfaccia utente azioni rapide nella mia applicazione. Android Quick Actions UI Pattern. La finestra di azione rapida richiede una vista pivot su cui attenersi.Android: Visualizza vista Riferimento a una voce di menu

quickAction.show(View pivotView); 

Intendo utilizzare l'azione rapida per il menu Elemento, posso accedere all'elemento su cui si fa clic. Ma il problema è che ho bisogno di fare riferimento a una vista dalla voce di menu in modo che io possa passarlo all'azione rapida.

Come posso ottenere un riferimento a una vista nel menu Oggetto selezionato.

+0

http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/ hai usato questo link .. –

+0

@NikhilreddyGujjula link non funziona. –

+0

molto indietro ho provato ha funzionato per me, ma non sto avendo il codice per me sry .. –

risposta

76

È possibile ottenere questo fornendo la propria voce di menu con una proprietà actionViewClass in xml e quindi sarà possibile ottenere la vista pivot desiderata. Il codice potrebbe essere qualcosa di simile

<item 
    android:id="@+id/menu_find" 
    android:showAsAction="ifRoom" 
    android:actionViewClass="android.widget.ImageButton" 
    /> 

Nei tuoi onCreateOptionsMenu fare questo

public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getMenuInflater().inflate(R.menu.menu_search, menu); 
    locButton = (ImageButton) menu.findItem(R.id.menu_find).getActionView(); 
    locButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      createPopup(); 
      mQuickAction.show(v); 
     } 
    }); 
    return true; 
} 
+0

Grazie mille! Ho avuto uno strano problema in cui il mirino avrebbe trovato una spettrale nella barra delle azioni quando su Android 4.1 ma su 4.2 è appena tornato nullo, questo lo ha risolto. – PSIXO

+0

setOnMenuItemClickListener sarà utile per me, nel caso in cui si desideri eseguire operazioni dirette con la voce di menu – AnkitRox

+11

utilizzare app: actionViewClass se si utilizza la libreria recente. (res-auto) –

28

vecchia questione, ma mi sono imbattuto in alcuni problemi con l'attributo actionViewClass. Per chi lo incontra più tardi ...

La chiamata findViewById(R.id.mnu_item) in onOptionsItemSelected restituirà un ancoraggio View.

QuickActions su MenuItems non sono un buon progetto, ma ho scoperto che sono il modo più semplice per implementare sottomenu con sfondi personalizzati.

+0

Immagino che sarà necessario fare clic su 'MenuItem' almeno una volta prima di poter ottenere l'ancora 'menuItem' 'vista'. – Leebeedev

+0

A destra, la chiamata 'findViewById()' dovrebbe essere eseguita in fase di esecuzione – loadedion

+0

Grazie a risposta @ASH non riuscita se si inserisce actionViewClass. Funziona alla grande. – iabhi

1

Un aggiornamento per chiunque voglia trovare l'elemento di visualizzazione del menu per altri motivi (come volevo).

Se si ha accesso e si utilizza la barra degli strumenti di AppCompat, esiste un modo. Non è il modo più efficiente, ma è il modo più semplice che ho trovato per accedere alla vista della voce del menu.

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); 

    // Find Menu 
    for (int toolbarChildIndex = 0; toolbarChildIndex < toolbar.getChildCount(); toolbarChildIndex++) { 
     View view = toolbar.getChildAt(toolbarChildIndex); 

     // Found Menu 
     if (view instanceof ActionMenuView) { 
      ActionMenuView menuView = (ActionMenuView) view; 

      // All menu items 
      for (int menuChildIndex = 0; menuChildIndex < menuView.getChildCount(); menuChildIndex++) { 
       ActionMenuItemView itemView = (ActionMenuItemView) menuView.getChildAt(menuChildIndex); 
       // Do something to itemView... 
      } 
     } 
    } 
} 
1

nella classe principale attività, meglio l'override del metodo onOptionsItemSelected (...); dovrebbe essere qualcosa come di seguito:

public boolean onOptionsItemSelected(MenuItem item) { 
    // the id is of type int 
    int someId = item.getItemId(); 
    // can use an if() or switch() statement to check if id is selected 
    //a Toast message can be used to show item is selected 
} 
1

Inorder per ottenere riferimento Vedute di voci di menu abbiamo bisogno di fare questo,

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.section, menu); 

    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 

      final View menuItemView = findViewById(R.id.action_preview); 
      // SOME OF YOUR TASK AFTER GETTING VIEW REFERENCE 

     } 
    }); 


    return true; 
} 
0

si può arrivare riferimento alla voce di menu in questo modo:

MenuItem btnFavorites = menu.findItem(R.id.action_favorite); 

E poi fai quello che vuoi con esso. Per esempio. cambiare la sua icona in questo modo:

btnFavorites.setIcon(R.drawable.ic_favorite_false); 
1

All'interno del onOptionsItemSelected semplicemente avere la vista utilizzando l'ID.

Visualizza menuItemView = findViewById (R.id.action_sort);

ora è possibile utilizzare questa vista secondo il vostro requirment.

Problemi correlati