19

Ich versuche einen Ansichtspager zu erstellen, der durch 3 verschiedene Fragmente mit jeweils einer anderen Symbolleiste wischt. Ich habe, bevor die neue Symbolleiste in einer Aktivität umgesetzt und bekam es jedoch zu arbeiten ich es zu bekommen versuchen, mit Fragmenten zu arbeitenVerwenden der Werkzeugleiste mit Fragmenten

Hier wird das Fragment Code

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout resource that'll be returned 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 


    mToolbar = (Toolbar) rootView.findViewById(R.id.toolbar_home); 
    if (mToolbar != null) { 
     setSupportActionBar(mToolbar); 
    } 
    mToolbar.setTitle(null); 

    return rootView; 
} 

ich mein Fragment mit Fragment erstreckt, aber ich bin immer der Fehler

Cannot resolve method setSupportActionBar 

ich bin nicht sicher, wie dieses Problem zu beheben, wenn ich entfernen sie den Code setSupportActionBar wird es die Arbeit mit bestimmten Geräten stoppen? Dank

+0

Gibt es ein Problem damit, es in Ihrem Aktivitätslayout zu haben und es in Ihrer Aktivität zu setzen? – tachyonflux

+0

jede Symbolleiste für jeden ViewPager wird eine andere Farbe und andere Menüs haben, so dachte ich, es wäre besser, sie mit den Fragmenten zu steuern –

+0

Hang on, ist nicht der springende Punkt in diesem Szenario * nicht * die 'ToolBar' zu setzen als 'ActionBar'? Da jedes Fragment eine eigene 'ToolBar' haben soll (die mit dem anderen Inhalt des Fragments mitschwingt), sprechen wir von ['standalone'] (http://android-developers.blogspot.nl)/2014/10/appcompat-v21-material-design-for-pre.html) (scrollen Sie zum Abschnitt "Standalone"), um das Widget zu verwenden. –

Antwort

47

Fragments haben keine solche Methode setSupportActionBar(). ActionBar ist eine Eigenschaft der Aktivität, so dass Ihre Symbolleiste zu setzen, wie die ActionBar, Ihre Aktivität von ActionBarActivity erstrecken sollte und dann können Sie in Ihrem Fragmente nennen:

((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar); 

UPDATE

Wenn Sie mit AppCompatActivity:

((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar); 
+1

In meinem Fall dies ersetzt nicht die Aktionsleiste der Mainactivity, aber gibt der Toolbar einen Titel wie in der Mainactivity. – Roel

+2

@vinitius Hey, in deiner obigen Antwort hast du nach getActivity vergessen, "()" zu schreiben. also füge das bitte hinzu, damit andere Leute nicht verwirrt werden. –

+0

Das Verschieben der SupportActionBar-Leiste von der Symbolleiste "Aktivitäten" in die Symbolleiste "Fragmente" kann dazu führen, dass die Symbolleiste "Unterstützung für Aktivitäten" nicht mehr angezeigt wird. Was ist, wenn Sie die Activity-Symbolleiste einmal innerhalb von Fragment mit verschobener SupportActionBar aktualisieren müssen? :). –

8

Mit dem neuen AppCompatActivity sollten Sie es statt ActionBarActivity nennen:

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

Sie können Symbolleiste in Fragmente hinzufügen, um dieses mit

((YOUR_ACTIVITY) getActivity()).getDelegate().setSupportActionBar(toolbar); 
4

ich viele Antworten gesehen haben setSupportActionBar für Symbolleiste innerhalb Fragment zu erwähnen, aber dieser Ansatz kann schief gehen, wenn Sie in Activity aa Symbolleiste haben und einen separaten Toolbar in Fragment.

  1. Wie Sie setSupportActionBar von Aktivität der Toolbar Fragment der Symbolleiste verschieben, können Sie doppelte MenuItem Gesicht sogar versuchen Sie setHasOptionsMenu(true) mit außer Kraft zu setzen.
  2. Zweitens Wenn Sie Activity's Toolbar aktualisieren möchten, sehen Sie, dass Ihre Änderungen wegen setSupportActionBar in Ihrem Fragment nicht wiedergegeben werden.

Also, um dies zu vermeiden, empfehle ich wie diese innerhalb Fragment Symbolleiste Methoden verwenden Menü aufzublasen und

toolbar = (Toolbar) view.findViewById(R.id.toolbar_frag); 
    toolbar.inflateMenu(R.menu.frag_menu_items); 
    Menu menu = toolbar.getMenu(); 

verwenden und Toolbar.OnMenuItemClickListener Schnittstelle erhalten mit MenuItems Ereignisse klicken.

+0

Hi Faisal Naseer können Sie es im Detail erklären, weil ich mit dem gleichen Problem konfrontiert bin, das Sie beschreiben. –

+0

sicher, was das Problem an Ihrem Ende haben Sie den oben genannten Ansatz versucht. –

+1

Ich habe das Problem mit Ihrem Code von RND gelöst, danke für Ihr Feedback. Eigentlich habe ich nur eine Aktivität und Rest von allem Fragment in meiner App. Daher tritt das Problem auf, wenn die Symbolleiste mit dem Optionsmenü in jedem Fragment aktualisiert wird. Aber mit deinem Code funktioniert es gut Thankyou. –