2015-07-13 8 views
5

Nella mia attività principale imposto una barra degli strumenti e quando entro all'interno di un frammento, voglio aggiungere un cursore. Se avessi avuto l'accesso alla barra degli strumenti, vorrei semplicemente fare:Ottenere la barra degli strumenti in frammento

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 
getSupportActionBar().setDisplayShowTitleEnabled(false); 


Spinner mNavigationSpinner = new SpinnerTrigger(getSupportActionBar().getThemedContext()); 
toolbar.addView(mNavigationSpinner); 

Ma se ho capito usando

((ActionBarActivity) getActivity()).getSupportActionBar() 

Non ho alcun metodo addView(). Quindi la mia domanda è, come posso aggiungere una vista alla barra degli strumenti in frammento se la barra degli strumenti è stata creata in un'attività.

Non sono sicuro che questa sia la vista migliore su questo, ma non credo di poter avere lo Spinner definito nel layout, perché la maggior parte dei miei frammenti non lo usa, semplicemente imposta un titolo sulla barra degli strumenti. Ma allo stesso tempo, sarebbe bello se potessi definire la barra degli strumenti una volta nell'attività principale e non rifarlo per ogni frammento.

+0

durante la creazione di un oggetto frammento, è possibile passare l'oggetto della barra degli strumenti al costruttore di frammenti. Questo è quello che ho fatto .. – Moinkhan

+0

@Moinkhan come? Quale oggetto dovrei passare al frammento? – Talha

+0

@Talha quando si crea il frammento da attività come Fragment fm = YourFragment.getInstance (yourToolbarinstance) ... ma penso che la risposta accettata sia un buon modo per ottenere questo .. – Moinkhan

risposta

24

Un altro modo per raggiungere la stessa cosa da Ellitz risposta, all'interno della barra degli strumenti di accesso frammento del (o qualsiasi altra vista all'interno attività) direttamente:

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
5

si può ottenere usando

Toolbar refTool = ((NameOfClass)getActivity()).toolbar; 

o, creare un'istanza della vostra MainActivity, quindi, ignorare onAttach(Activity activity) e assegnare l'oggetto di MainActivity esempio per l'attività in onAttach()

+0

Se non ci sono metodi incorporati per questo, immagino che questo sarebbe la soluzione migliore. Grazie. – Limon

0

See barra degli strumenti principale lo scopo è https://developer.android.com/reference/android/widget/Toolbar.html letto qui, quindi non c'è nulla di deferenza nella barra degli strumenti e nella barra delle azioni. quindi se si desidera aggiungere la vista alla barra degli strumenti prima di impostarla su Actionbar, allora toolbar.addView(your view); va bene, ma dopo l'applicazione si applicano a setactionbar(toolbar) o setSupportActionbar(toolbar) è possibile impostare la visualizzazione sulla barra delle azioni.

ex. ((ActionBarActivity) getActivity()). GetSupportActionBar(). Setview (Your view)

Ecco fatto ...

0

vorrei aggiungere un casting a ciò che Budius detto.

Toolbar toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar); 

è il modo giusto di farlo. Perché

getActivity().findViewById(R.id.toolbar); 

restituisce una vista. Questo ti darà un errore e dovresti trasmetterlo a Toolbar.