wake-up-neo.com

Wie bekomme ich Toolbar von fragment?

Ich habe ActionBarActivity mit NavigationDrawer und benutze support_v7 Toolbar als ActionBar. In einem meiner Fragmente hat die Symbolleiste eine benutzerdefinierte Ansicht. In anderen Fragmenten sollte Toolbar den Titel anzeigen.

Wie erhält man eine Toolbar-Instanz zum Anpassen von Fragmenten? Ich kann ActionBar mit getActivity().getActionBar() abrufen, aber wenn ich setTitle() für diese Instanz ActionBar aufrufe, wird nichts unternommen.

UPD:

In meinem Fall 

((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();

(wie MrEngineer13 schon sagte) funktioniert bei der ersten Fragmenterstellung nicht, weil ich es von onHiddenChanged () aus aufrufe. Nun füge ich onCreateView () weitere hinzu und es funktioniert gut.

89
anisart

Sie müssen Ihre Aktivität zuerst von getActivity() in AppCompatActivity umwandeln. Hier ist ein Beispiel:

((AppCompatActivity) getActivity()).getSupportActionBar().setTitle();

Der Grund dafür, dass Sie es einsetzen müssen, ist, dass getActivity() eine FragmentActivity zurückgibt und Sie eine AppCompatActivity benötigen.

168
MrEngineer13

Falls Fragmente über eine benutzerdefinierte Ansicht von ToolBar verfügen, können Sie ToolBar für jedes Fragment separat implementieren.

füge Toolbar in fragment_layout hinzu:

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimaryDark"/>

finde es in fragment:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container, false);
        Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);

        //set toolbar appearance
        toolbar.setBackground(R.color.material_blue_grey_800);

        //for crate home button
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

der Menülistener kann auf zwei Arten erstellt werden: Überschreiben Sie onOptionsItemSelected in Ihrem Fragment:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case Android.R.id.home:
            getActivity().onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}

oder Listener für Symbolleiste festlegen, wenn er in onCreateView () erstellt wird:

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                return false;
            }
        });
71
Flinbor

Sie haben zwei Möglichkeiten, die Symbolleiste in Fragment zu laden

Erster 

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

und der zweite

Toolbar toolbar = ((MainActivity) getActivity()).mToolbar;
39
Bhargav Pandit
toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
7
Danial

Sie können dazu eine Methode für Ihre Aktivitätsklasse erstellen:

public void setToolbarTitle(String title) {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle(title);
}

Und Sie können so verwenden:

setToolbarTitle("Hello World");
1
Mete

Vielleicht müssen Sie getActivity().getSupportActionBar().setTitle() ausprobieren, wenn Sie support_v7 verwenden.

1
Wang

Für Kotlin-Benutzer (activity as AppCompatActivity).supportActionBar!!.show()

1
Muhamed Riyas M

Von deinem Fragment: (Toolbar von Fragment erhalten?)

// get toolbar
((MainAcivity)this.getActivity()).getToolbar();  // getToolbar will be method in Activity that returns Toolbar!!  don't use getSupportActionBar for getting toolbar!!
// get action bar
this.getActivity().getSupportActionBar();

dies ist sehr hilfreich, wenn Sie den Spinner in der Toolbar verwenden und den Spinner oder den benutzerdefinierten views in der Toolbar von einem Fragment aus aufrufen!

Von Ihrer Aktivität:

// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();
1
LOG_TAG

Ich habe es mit diesen Schritten gemacht.

  1. Stellen Sie den Titel unter Verwendung des folgenden Codes in onCreateView des Hauptfragments ein.
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your title");

  1. Zum Wechseln zwischen Fragmenten verwende ich die untere Navigationsleiste, die in MainActivity (Parent Activity) des Fragments implementiert ist. Selbst wenn Sie eine Taste oder einen Menüpunkt verwenden, können Sie den Titel von onSelectedItemClickListener ändern, so wie ich es in meinem Fall getan habe.
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.menu_dashboard:
                getSupportActionBar().setTitle("Dashboard");
                fm.beginTransaction().hide(active).show(dashboardFragment).commit();
                active = dashboardFragment;
                return true;
            case R.id.menu_workshop:
                getSupportActionBar().setTitle("Workshops");
                fm.beginTransaction().hide(active).show(workshopFragment).commit();
                active = workshopFragment;
                return true;
         }
         return false;
    }
    
0
Deepak Kaushik