2014-11-20 9 views
29

Desidero impostare la barra degli strumenti come barra di azione, ma poiché la barra degli strumenti è un elemento di layout deve essere nel layout. Ora il mio layout è nel mio frammento.Imposta la barra degli strumenti come barra di azione nel frammento

ho aggiunto la barra degli strumenti in mio layout e mi chiamano nel mio frammento:

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

Funziona perché posso impostare il titolo e così via, ma ora voglio di reagire come un ActionBar perché voglio per avere questo in realtà. setDisplayHomeAsUpEnabled (vero)

Per fare questo devo cambiare la barra degli strumenti a un ActionBar:

setSupportActionBar(toolbar); 

che non funziona nel mio frammento ...

Qualcuno può aiutarmi a ottenere la mia barra degli strumenti per funzionare come una barra di azione in un frammento.

risposta

39

Ora ActionBarActivity è deprecato in modo È necessario lanciare la vostra attività dal getActivity() a AppCompatActivity prima. Ecco un esempio:

((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle(); 

Il motivo è necessario lanciare è perché getActivity() restituisce un FragmentActivity e avete bisogno di un AppCompatActivity

15

ActionBar è una proprietà Activity. Se si desidera impostare una barra degli strumenti da un dato frammento come ActionBar dell'attività proprietaria, quindi ottenere l'attività che possiede il frammento (Fragment.getActivity()) e impostare la proprietà ActionBar.

Quindi juse usa lo stesso metodo setDisplayHomeAsUpEnabled che hai menzionato per iniziare su ActionBar dopo aver impostato la barra degli strumenti come ActionBar per ottenere il pulsante back/up.

Dovrai ovviamente gestirlo con attenzione se la tua app ha più frammenti all'interno di tale attività.

+0

voglio solo utilizzare fino navigazione in modo da penso che sia il motivo per cui ho bisogno di una barra delle azioni fatta dalla mia barra degli strumenti. Come posso impostare la proprietà ActionBar per fornirmi un esempio e per favore? – Laurenswuyts

+0

Perché non mettere la barra degli strumenti nella tua attività principale e in questo modo sarai in grado di utilizzare il metodo setSupportActionBar –

+0

Perché utilizzo frammenti e imposto il mio layout nei miei frammenti e non nelle mie attività. Quindi la mia attività non può rilevare la barra degli strumenti nel mio frammento perché il frammento viene caricato dopo che l'attività cerca la barra degli strumenti – Laurenswuyts

7

Usa

((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title"); 
+0

Ciò restituisce una NullPointerException. – Machado

+5

è necessario impostare prima di ottenere. (che fa rima) – notdrone

25

prova:

((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);