J'ai 1 activité avec 3 fragments à l'intérieur (Home-Login-RestorePass) Initialement, HomeFragment montre et les deux autres sont cachés. Je souhaite que le titre de la barre d’action change en fonction du fragment affiché.
J'essaie dans mon activité avec:
public void setActionBarTitle(String title){
getSupportActionBar().setTitle(title);
}
@Override
public void onResume() {
super.onResume();
// Set title
setActionBarTitle(getString(R.string.app_name));
}
et les fragments ont le même:
@Override
public void onResume() {
super.onResume();
// Set title
((LoginActivity) getActivity()).setActionBarTitle(getString(R.string.fragment_login));
}
Mais ça ne marche pas. Il montre toujours R.string.fragment_login sur le titre.
J'utilise FragmentTransaction pour la transition de fragment:
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(Android.R.anim.slide_in_left, Android.R.anim.slide_out_right);
HomeFragment homeFragment = (HomeFragment) getFragmentManager().findFragmentById(R.id.fragmentHome);
LoginFragment loginFragment = (LoginFragment) getFragmentManager().findFragmentById(R.id.fragmentLogin);
ft.hide(homeFragment).addToBackStack(null);
ft.show(loginFragment).addToBackStack(null).commit();
}
});
De plus, si je pouvais faire apparaître un bouton fléché (Retour) sur ActionBar en fonction du fragment, ce serait génial.
Merci pour votre temps! Cordialement.
Utilisez cette méthode en activité pour modifier la Fragment
et définir le titre par programme:
private void displayFragment(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
String title = "";
switch (position) {
case 0:
fragment = new Home();
title = "Home";
break;
case 1:
fragment = new Login();
title = "Login";
break;
case 2:
fragment = new RestorePass();
title = "Restore Password";
break;
default:
break;
}
// update selected fragment and title
if (fragment != null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_container, fragment).commit();
getSupportActionBar().setTitle(title);
// change icon to arrow drawable
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_arrow);
}
}
Par exemple, vous souhaitez que le fragment Home
soit affiché:
displayFragment(0);
Gardez à l'esprit que si vous utilisez la bibliothèque de support, vous devez spécifiquement lancer votre activité lorsque vous l'obtenez via getActivity()
. Et vous voudrez ensuite vous assurer de récupérer un ActionBar de support en utilisant getSupportActionBar()
. J'ai pu définir le titre de la barre d'action dans mon application en utilisant le code suivant dans la fonction onResume()
... de mon fragment.
@Override
public void onResume() {
super.onResume();
AppCompatActivity activity = (AppCompatActivity) getActivity();
ActionBar actionBar = activity.getSupportActionBar();
actionBar.setTitle(R.string.my_fragment_title);
}
Si vous définissez l'attribut d'activité Android:label=""
dans la AndroidManifest
, vous pourrez définir l'initialisation du titre. J'ai découvert ce traçage via le code source de la barre d'outils.