Festlegen des benutzerdefinierten ActionBar-Titels aus dem Fragment


90

In meinem Main FragmentActivityrichte ich meinen benutzerdefinierten ActionBarTitel folgendermaßen ein:

    LayoutInflater inflator = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflator.inflate(R.layout.custom_titlebar, null);

    TextView tv = (TextView) v.findViewById(R.id.title);
    Typeface tf = Typeface.createFromAsset(this.getAssets(),
            "fonts/capsuula.ttf");
    tv.setTypeface(tf);
    tv.setText(this.getTitle());

    actionBar.setCustomView(v);

Das funktioniert perfekt. Sobald ich jedoch andere öffne Fragments, möchte ich, dass sich der Titel ändert. Ich bin nicht sicher, wie ich dazu auf den Main zugreifen soll Activity. In der Vergangenheit habe ich Folgendes getan:

((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle(
            catTitle);

Kann jemand über die richtige Methode beraten?

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:text=""
        android:textColor="#fff"
        android:textSize="25sp" />

</RelativeLayout>

stackoverflow.com/a/28279341/1651286 sollte aufgrund seiner Skalierbarkeit die akzeptierte Antwort sein. Da bei allen anderen Ansätzen Fragmente an bestimmte Aktivitäten gebunden sind, was kein skalierbares Design ist, was auch, wenn dasselbe Fragment für mehrere Aktivitäten verwendet werden muss, empfiehlt dies auch das Android-Framework.
Akhil Dad

Antworten:


97

=== Update 30. Oktober 2019 ===

Da wir über neue Komponenten wie ViewModel und LiveData verfügen , können wir den Aktivitätstitel mithilfe von ViewModel und Live Data auf andere / einfachere Weise aus dem Fragment aktualisieren

Aktivität

class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    if (savedInstanceState == null) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.container, MainFragment.newInstance())
            .commitNow()
    }
    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    viewModel.title.observe(this, Observer {
        supportActionBar?.title = it
    })
} }

MainFragment

class MainFragment : Fragment() {
companion object {
    fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View {
    return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    activity?.run {
        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    } ?: throw Throwable("invalid activity")
    viewModel.updateActionBarTitle("Custom Title From Fragment")
} }

Und MainModelView:

class MainViewModel : ViewModel() {
private val _title = MutableLiveData<String>()
val title: LiveData<String>
get() = _title
fun updateActionBarTitle(title: String) = _title.postValue(title) }

Und dann können Sie den Aktivitätstitel von Fragment mit aktualisieren viewModel.updateActionBarTitle("Custom Title From Fragment")

=== Update 10. April 2015 ===

Sie sollten den Listener verwenden, um den Titel Ihrer Aktionsleiste zu aktualisieren

Fragment:

public class UpdateActionBarTitleFragment extends Fragment {
    private OnFragmentInteractionListener mListener;

    public UpdateActionBarTitleFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (mListener != null) {
            mListener.onFragmentInteraction("Custom Title");
        }
        return inflater.inflate(R.layout.fragment_update_action_bar_title2, container, false);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(String title);
    }
}

Und Aktivität:

public class UpdateActionBarTitleActivity extends ActionBarActivity implements UpdateActionBarTitleFragment.OnFragmentInteractionListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_action_bar_title);
    }

    @Override
    public void onFragmentInteraction(String title) {
        getSupportActionBar().setTitle(title);
    }
}

Lesen Sie hier mehr: https://developer.android.com/training/basics/fragments/communicating.html


1
Es hat bei mir funktioniert! Ich habe stattdessen nur getActionBar (). SetTitle (title) in der Aktivität verwendet. Danke
happyreed76

1
Genau das, wonach ich gesucht habe, hat für mich besser funktioniert als die gewählte Antwort. Vielen Dank!
Dstrube

1
Dies sollte die akzeptierte Antwort sein! Es zeigt korrekt, wie es gemacht werden soll: Wenn ein Fragment mit seiner Hosting-Aktivität kommunizieren möchte, sollte die Kommunikation immer über eine Schnittstelle erfolgen. Das Fragment stellt die Schnittstelle bereit und die Aktivität implementiert sie! Wenn mehrere Fragmente auf dieselbe Weise mit einer Aktivität kommunizieren müssen, schreiben Sie ein abstraktes Fragment, das die Schnittstelle bereitstellt, und lassen Sie dann jedes Fragment von diesem "Basisfragment" erben.
Winklerrr

3
Übrigens: Die in dieser Antwort verwendete Methode onAttach (Aktivität) ist zu diesem Zeitpunkt veraltet. Überprüfen Sie innerhalb der onAttach(Context)Methode, ob die übergebene Hostaktivität die erforderliche Schnittstelle implementiert (Abrufen der Hostaktivität über context.getActivity()).
Winklerrr

1
Nach vielen Jahren habe ich dies in die akzeptierte Antwort geändert, da Schnittstellen bekanntlich die Art und Weise sind, wie Fragmente und Aktivitäten kommunizieren müssen.
TheLettuceMaster

148

Was Sie tun, ist richtig. FragmentsSie haben keinen Zugriff auf die ActionBarAPIs, daher müssen Sie aufrufen getActivity. Sofern Fragmentes sich nicht um eine statische innere Klasse handelt, sollten Sie in diesem Fall eine WeakReferenceübergeordnete Klasse erstellen und Aktivität aufrufen. getActionBarvon dort.

Um den Titel für Sie festzulegen, müssen Sie anrufen ActionBar, während Sie ein benutzerdefiniertes Layout verwenden .FragmentgetActivity().setTitle(YOUR_TITLE)

Der Grund, warum Sie anrufen, setTitleist, dass Sie getTitleals Titel Ihres Anrufs anrufen ActionBar. getTitlegibt den Titel dafür zurück Activity.

Wenn Sie keinen Anruf erhalten möchten getTitle, müssen Sie eine öffentliche Methode erstellen, die den Text Ihres TextViewin dem ActivityHost festlegt, in dem sich das befindet Fragment.

In Ihrer Aktivität :

public void setActionBarTitle(String title){
    YOUR_CUSTOM_ACTION_BAR_TITLE.setText(title);
}

In deinem Fragment :

((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);

Docs:

Activity.getTitle

Activity.setTitle

Außerdem müssen Sie nicht this.whateverden von Ihnen angegebenen Code eingeben , sondern nur einen Tipp.


Ich versuche es und ich kann es nicht zum Laufen bringen. Für was es wert ist, habe ich meine gepostet XMLund auch "dies" entfernt. Keine Veränderungen ... Und nein, es ist keine staticinnere Klasse.
TheLettuceMaster

Warten Sie, was funktioniert nicht? In Ihrem OP erwähnen Sie nichts , was nicht funktioniert. Sie erwähnen nur, dass Sie die "richtige" Methode kennen möchten, um den Titel in der ActionBarvon a festzulegen Fragment. Außerdem habe ich das Entfernen nicht this.whateverals Lösung für irgendetwas angeboten, das war nur ein Tipp zur Code-Formatierung.
Adneal

Ich glaube, ich verstehe, womit Sie Probleme haben, und habe meine Antwort entsprechend bearbeitet.
Adneal

Thankx perfekte Antwort
Ammar ali

@KickingLettuce, ich kämpfe eine Weile mit dieser Antwort, bis ich sie zum Laufen gebracht habe (deshalb habe ich sie sowie Ihre Frage positiv bewertet): In meiner Hauptaktivität in der Navigationsleiste ( menu_act) habe ich globales "mTitle" erstellt und in a Fragment, zuerst weise ich "mTitle" ( ( (menu_act) getActivity() ).mTitle = "new_title") einen Titel zu und sofort ( (menu_act) getActivity() ).restoreActionBar();. In "restoreActionBar ()" habe ich "actionBar.setTitle (mTitle);".
Jose Manuel Abarca Rodríguez

29

Google-Beispiele verwenden dies in der Regel innerhalb der Fragmente.

private ActionBar getActionBar() {
    return ((ActionBarActivity) getActivity()).getSupportActionBar();
}

Das Fragment gehört zu einer ActionBarActivity, und dort befindet sich der Verweis auf die Actionbar. Dies ist sauberer, da das Fragment nicht genau wissen muss, um welche Aktivität es sich handelt, sondern nur zu einer Aktivität gehören muss, die ActionBarActivity implementiert. Dies macht das Fragment flexibler und kann wie vorgesehen zu mehreren Aktivitäten hinzugefügt werden.

Jetzt müssen Sie im Fragment nur noch etwas tun.

getActionBar().setTitle("Your Title");

Dies funktioniert gut, wenn Sie ein Basisfragment haben, von dem Ihre Fragmente anstelle der normalen Fragmentklasse erben.

public abstract class BaseFragment extends Fragment {
    public ActionBar getActionBar() {
        return ((ActionBarActivity) getActivity()).getSupportActionBar();
    }
}

Dann in deinem Fragment.

public class YourFragment extends BaseFragment {
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getActionBar().setTitle("Your Title");
    }
}

Vielen Dank. Sehr schöne Lösung. Auf diese Weise können Sie auch eine benutzerdefinierte Ansicht an Ihre Aktionsleiste übergeben.
Amir

Mit den neuesten Updates für Android SDK möchten Sie möglicherweise anstelle von ActionBarActivity auf AppCompatActivity downcasten, falls Sie die Abwärtskompatibilitätsbibliothek der Version 7 verwenden (was Sie wahrscheinlich sollten).
fr4gus

8

Das Einstellen Activitydes Titels von einem Fragmentbringt die Verantwortlichkeitsstufen durcheinander. Fragmentist in einem enthalten Activity, also ist dies das Activity, das seinen eigenen Titel entsprechend dem Typ des Fragmentzum Beispiel setzen sollte.

Angenommen, Sie haben eine Schnittstelle:

interface TopLevelFragment
{
    String getTitle();
}

Die Fragments, die den ActivityTitel des ' beeinflussen können, implementieren dann diese Schnittstelle. Während der Hosting-Aktivität schreiben Sie:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().add(0, new LoginFragment(), "login").commit();
}

@Override
public void onAttachFragment(Fragment fragment)
{
    super.onAttachFragment(fragment);

    if (fragment instanceof TopLevelFragment)
        setTitle(((TopLevelFragment) fragment).getTitle());
}

Auf diese Weise haben Sie Activityimmer die Kontrolle darüber, welcher Titel verwendet werden soll, auch wenn mehrere TopLevelFragments kombiniert werden, was auf einem Tablet durchaus möglich ist.


6

Ich denke nicht, dass die akzeptierte Antwort eine perfekte Antwort dafür ist. Da alle Aktivitäten, die verwenden

Symbolleiste

werden mit erweitert

AppCompatActivity

können die darauf aufgerufenen Fragmente den unten genannten Code zum Ändern des Titels verwenden.

((AppCompatActivity) context).getSupportActionBar().setTitle("Your Title");

5

In dem Fragment, das wir so verwenden können, funktioniert es gut für mich.

getActivity().getActionBar().setTitle("YOUR TITLE");

Dies funktioniert nicht, wenn die Symbolleiste unserer Aktivität eine Textansicht hat, die die Rolle des Titels hat
Simon

4

Nur für den Fall, dass Sie Probleme mit dem Code haben, versuchen Sie, getSupportActionBar().setTitle(title)in onResume()Ihr Fragment zu setzen, anstatt onCreateView(...)dh

In MainActivity.java :

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

Im Fragment:

 @Override
 public void onResume(){
     super.onResume();
     ((MainActivity) getActivity()).setActionBarTitle("Your Title");
 }

Dies war mein Problem - wo ich den Titel festlegte. Es ((MainActivity) getActivity()).setTitle("title")genügte jedoch. In Kotlin tut es mein Fragment activity!!.title = "title.
Joe Lapp

2

Verwenden Sie Folgendes:

getActivity().setTitle("YOUR_TITLE");

Diese Antwort dient zum Ändern des Titels der Aktivität. Die Frage bezieht sich stattdessen auf den Titel der Aktionsleiste.
David d C e Freitas

Danke @Anisetti! Genau das habe ich in der Fragment-Klasse gemacht.
Francis Rodrigues

2

Hier ist meine Lösung zum Festlegen des ActionBar-Titels aus Fragmenten bei Verwendung von NavigationDrawer. Diese Lösung verwendet eine Schnittstelle, sodass die Fragmente nicht direkt auf die übergeordnete Aktivität verweisen müssen:

1) Erstellen Sie eine Schnittstelle:

public interface ActionBarTitleSetter {
    public void setTitle(String title); 
}

2) Wandeln Sie die Aktivität in onAttach des Fragments in den Schnittstellentyp um und rufen Sie die SetActivityTitle-Methode auf:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity);
    ((ActionBarTitleSetter) activity).setTitle(getString(R.string.title_bubbles_map)); 
}

3) Implementieren Sie in der Aktivität die ActionBarTitleSetter- Schnittstelle:

@Override 
public void setTitle(String title) { 
    mTitle = title; 
}

Dies sollte die akzeptierte Antwort sein, da alle anderen Ansätze Fragmente an bestimmte Aktivitäten binden, was kein skalierbares Design ist. Dies empfiehlt auch das Android-Framework
Akhil Dad

2

Ein einfaches Kotlin-Beispiel

Angenommen, diese Gradle-Deps stimmen überein oder sind eine höhere Version in Ihrem Projekt:

kotlin_version = '1.3.41'
nav_version_ktx = '2.0.0'

Passen Sie dies an Ihre Fragmentklassen an:

    /**
     * A simple [Fragment] subclass.
     *
     * Updates the action bar title when onResume() is called on the fragment,
     * which is called every time you navigate to the fragment
     *
     */

    class MyFragment : Fragment() {
    private lateinit var mainActivity: MainActivity

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

       //[...]

        mainActivity = this.activity as MainActivity

       //[...]
    }

    override fun onResume() {
        super.onResume()
        mainActivity.supportActionBar?.title = "My Fragment!"
    }


    }

1

Wenn Sie eine Hauptaktivität mit vielen Fragmenten haben, die Sie eingefügt haben, verwenden Sie normalerweise den navigationDrawer. Und Sie haben eine Reihe von Titeln für Ihre Fragmente. Wenn Sie zurück drücken, damit sie sich ändern, setzen Sie dies in die Hauptaktivität, die die Fragmente enthält

@Override
     public void onBackPressed() {

    int T=getSupportFragmentManager().getBackStackEntryCount();
    if(T==1) { finish();}

    if(T>1) {
        int tr = Integer.parseInt(getSupportFragmentManager().getBackStackEntryAt(T-2).getName());
        setTitle(navMenuTitles[tr]);  super.onBackPressed();
      }

}

Dies setzt voraus, dass Sie ihm für jedes Fragment ein Tag geben, normalerweise irgendwo, wenn Sie die Fragmente entsprechend der in der Liste gedrückten Position zur Liste von navigationDrawer hinzufügen. Diese Position ist das, was ich auf dem Tag festhalte:

    fragmentManager.beginTransaction().
replace(R.id.frame_container, fragment).addToBackStack(position).commit();

Jetzt laden Sie die navMenuTitles auf onCreate

 // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

Die Array-XML ist eine String-Ressource vom Typ Array in der Datei strings.xml

 <!-- Nav Drawer Menu Items -->
    <string-array name="nav_drawer_items">
        <item>Title one</item>
        <item>Title Two</item>
    </string-array>

1

Speichern Sie Ihre Antwort im String [] -Objekt und setzen Sie sie in MainActivity auf OnTabChange () als Belowwww

String[] object = {"Fragment1","Fragment2","Fragment3"};

public void OnTabChange(String tabId)
{
int pos =mTabHost.getCurrentTab();     //To get tab position
 actionbar.setTitle(object.get(pos));
}


//Setting in View Pager
public void onPageSelected(int arg0) {
    mTabHost.setCurrentTab(arg0);
actionbar.setTitle(object.get(pos));
}

1

Der Nachteil Ihres Ansatzes, so zu gießen

((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle(
        catTitle);

ist, dass Ihr Fragment außerhalb von MainActivityFragment nicht mehr wiederverwendbar ist. Wenn Sie nicht vorhaben, es außerhalb dieser Aktivität zu verwenden, gibt es kein Problem. Ein besserer Ansatz wäre, den Titel abhängig von der Aktivität bedingt festzulegen. In Ihrem Fragment würden Sie also schreiben:

if (getActivity() instanceof ActionBarActivity) {
    ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Some Title");
}

1

Wenn Sie die von Google bereitgestellte stabile Vorlage für Android Studio 1.4 verwenden, mussten Sie folgenden Code in die onNavigationItemSelectedMethode schreiben, in der Ihr zugehöriges Fragment die if-Bedingung aufruft.

 setTitle("YOUR FRAGMENT TITLE");

Das ist wunderbar, wenn Sie direkt von der Aktivität aus auf den Titel zugreifen können ... aber wenn der Titel eine dynamisch festgelegte Zeichenfolge im Fragment ist, muss eine Kommunikation zwischen dem Fragment und der Aktivität stattfinden
me_

1

Bestes Event für Titelwechsel onCreateOptionsMenu

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.general, container,  
    setHasOptionsMenu(true); // <-Add this line
    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // If use specific menu
    menu.clear();
    inflater.inflate(R.menu.path_list_menu, menu);
    // If use specific menu

    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your Fragment");
    super.onCreateOptionsMenu(menu, inflater);
}

1

Ich bekomme eine sehr einfache Lösung, um den ActionBar-Titel entweder in Fragmenten oder in Aktivitäten ohne Kopfschmerzen festzulegen.

Ändern Sie einfach die XML-Datei, in der die Symbolleiste definiert ist, wie folgt:

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimaryDark"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

            <TextView
                style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                android:id="@+id/toolbar_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                />
            </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout> 

1) Wenn Sie die Aktionsleiste in einem Fragment festlegen möchten, gehen Sie wie folgt vor:

Toolbar toolbar = findViewById(R.id.toolbar);
TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);

Für die Verwendung von überall können Sie eine Methode in der Aktivität definieren

public void setActionBarTitle(String title) {
        toolbarTitle.setText(title);
    }

Um diese Methode in Aktivität aufzurufen, rufen Sie sie einfach auf.

setActionBarTitle("Your Title")

Um diese Methode aus einem Fragment der Aktivität aufzurufen, rufen Sie sie einfach auf.

((MyActivity)getActivity()).setActionBarTitle("Your Title");

Ausgezeichnet! Die Verwendung von toolbar_title überschreibt den Fragmenttitel, wenn Android-Navigationskomponenten verwendet werden.
Paixols

0

Um die ausgewählte Antwort zu ergänzen, möchten Sie möglicherweise auch eine zweite Methode zu Ihrer Hauptaktivität hinzufügen. Sie würden also in Ihrer Hauptaktivität die folgenden Methoden anwenden:

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

public void setActionBarTitle(int resourceId) {
    setActionBarTitle(getResources().getString(resourceId);
}

Auf diese Weise können Sie den Titel sowohl aus einer String-Variablen als auch aus einer Ressourcen-ID festlegen, z. B. R.id.this_is_a_stringaus Ihrer Datei strings.xml. Dies funktioniert auch ein bisschen mehr wie es getSupportActionBar().setTitle()funktioniert, da Sie eine Ressourcen-ID übergeben können.


0

Es gibt viele Möglichkeiten, wie oben beschrieben. Sie können dies auch onNavigationDrawerSelected()in Ihrem tunDrawerActivity

public void setTitle(final String title){
    ((TextView)findViewById(R.id.toolbar_title)).setText(title);
}

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    fragment = null;
    String title = null;
    switch(position){

    case 0:
        fragment = new HomeFragment();
        title = "Home";
        break;
    case 1:
        fragment = new ProfileFragment();
        title = ("Find Work");
        break;
    ...
    }
    if (fragment != null){

        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager
        .beginTransaction()
        .replace(R.id.container,
                fragment).commit();

        //The key is this line
        if (title != null && findViewById(R.id.toolbar_title)!= null ) setTitle(title);
    }
}

0

Zumindest für mich gab es eine einfache Antwort (nach langem Hin und Her) auf das Ändern eines Tab-Titels zur Laufzeit:

TabLayout tabLayout = (TabLayout) findViewById (R.id.tabs); tabLayout.getTabAt (MyTabPos) .setText ("Mein neuer Text");


0

Wenn Sie ViewPager(wie mein Fall) verwenden, können Sie verwenden:

getSupportActionBar().setTitle(YOURE_TAB_BAR.getTabAt(position).getText());

in onPageSelectedMethode IhrerVIEW_PAGER.addOnPageChangeListener


0

In Ihrer Hauptaktivität unter onCreate:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Und in Ihrer Fragmentaktivität unter onResume:

getActivity().setTitle(R.string.app_name_science);

Optional: - Wenn eine Warnung vor einer Nullreferenz angezeigt wird

Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);


Objects.requireNonNull(getActivity()).setTitle(R.string.app_name_science);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.