J'utilise la dernière barre d'outils d'AppCompatv7 lib.J'ai placé une vue de texte dans le groupe de vues de la barre d'outils et je veux définir un titre dans cette vue de texte à partir du fragment de mon activité.En cas de barre d'action personnalisée ((ActionBarActivity) getActivity) .setcustomView (..) aurait fait le travail. Mais en raison de l'utilisation de cette barre d'outils, je ne suis pas en mesure de l'utiliser. J'ai également implémenté une méthode dans ma BaseActivity héritée de toutes les activités.Cette baseActivity contient ma méthode pour initialiser un tiroir coulissant vers la gauche.Je dois initialiser la méthode initDrawerLayout () en activité, sinon le tiroir ne serait pas initialisé.Et si je l'initialise par fragment, il me donne tous les résultats vides, ni le bouton bascule du tiroir ni le titre personnalisé se prépare.
Ceci est mon code initDrawer ..
public void initDrawerLayout(String toolbar_text) {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerRelative = (RelativeLayout) findViewById(R.id.drawer_relative);
if (mDrawerLayout != null) {
findViewById(R.id.drawer_btn_a).setOnClickListener(this);
findViewById(R.id.drawer_btn_b).setOnClickListener(this);
findViewById(R.id.drawer_btn_c).setOnClickListener(this);
findViewById(R.id.drawer_btn_d).setOnClickListener(this);
findViewById(R.id.drawer_btn_e).setOnClickListener(this);
findViewById(R.id.drawer_btn_f).setOnClickListener(this);
findViewById(R.id.drawer_btn_g).setOnClickListener(this);
findViewById(R.id.drawer_btn_h).setOnClickListener(this);
findViewById(R.id.drawer_btn_i).setOnClickListener(this);
findViewById(R.id.drawer_btn_j).setOnClickListener(this);
findViewById(R.id.drawer_btn_k).setOnClickListener(this);
findViewById(R.id.drawer_btn_l).setOnClickListener(this);
findViewById(R.id.my_layout).setOnClickListener(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
toolbar.setBackground(getResources().getDrawable(R.drawable.icn_actionbar_background));
TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
mTitle.setText(toolbar_text);
mTitle.setTypeface(Typeface.DEFAULT_BOLD);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
toolbar.setNavigationIcon(R.drawable.ic_drawer);
mDrawerToggle = new ActionBarDrawerToggle(
this, mDrawerLayout, toolbar,
R.string.drawer_open, R.string.drawer_close
);
mDrawerLayout.setDrawerListener(mDrawerToggle);
toolbar.setNavigationOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
} else {
mDrawerLayout.openDrawer(Gravity.LEFT);
}
}
});
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START);
mDrawerLayout.setScrimColor(getResources().getColor(
Android.R.color.transparent));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
}
Et ceci mon code dans le fragment ..
((FirstActivity) getActivity()).initDrawerLayout(mFirst.name);
où mFirst est un objet de classe Person
et le code de la barre d'outils ..
<Android.support.v7.widget.Toolbar
Android:id="@+id/my_awesome_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize">
<TextView
Android:id="@+id/toolbar_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:gravity="center"
Android:text="Toolbar Title"
Android:textColor="@color/action_text-color"
Android:textSize="18sp"
Android:textStyle="bold" />
</Android.support.v7.widget.Toolbar>
S'il vous plaît aider les gars ..
Pour permettre à un fragment de communiquer jusqu'à son activité (pour définir le titre de la barre d'outils), vous pouvez définir une interface dans la classe Fragment et l'implémenter dans l'activité comme décrit ici: Communication avec d'autres fragments .
Je fais ceci comme ceci: De l'appel fragment
getActivity().setTitle("your title");
Aussi, vous pouvez appeler n’importe quelle fonction de votre activité parent comme ceci:
YourActivity mYourActiviy = (YourActivity) getActivity();
mYourActivity.yourActivityFunction(yourParameters);
La réponse est écrite ci-dessous dans la méthode oncreateview
de fragments.
getActivity().setTitle("your name");
À Kotlin.
En fragment:
(activity as YourActivity).supportActionBar?.title = getString(R.string.your_title)
En activité:
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
Si vous avez définiSupportActionBar dans votre activité, vous pouvez facilement modifier le titre de la barre d'outils à partir de votre fragment.
((YourActivity) getActivity()).getSupportActionBar().setTitle("Your Title");
Vous pouvez changer le titre de votre barre d’outils sur l’événement OnAttach, quelque chose comme ceci
var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
toolbar.Title = "New Title";
Ce travail pour moi:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.id_toolbar);
toolbar.setTitle("New Title");
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager.BackStackEntry lastBackStackEntry=null;
int lastBackStackEntryCount = getSupportFragmentManager().getBackStackEntryCount() - 1;
if(lastBackStackEntryCount >= 0 )
{
lastBackStackEntry = getSupportFragmentManager().getBackStackEntryAt(lastBackStackEntryCount);
}
Toast.makeText(MainActivity.this, ""+lastBackStackEntryCount, Toast.LENGTH_SHORT).show();
if(lastBackStackEntryCount == -1)
{
toolbar.setTitle("");
toolbar.setLogo(R.drawable.header_logo);
}
else
{
toolbar.setTitle(lastBackStackEntry.getName());
}
}
});
Si vous utilisez une barre d'outils personnalisée, cela vous aidera à:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setTitle("Feedback");
xml
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar_detail"
Android:layout_width="match_parent"
Android:layout_height="55dp"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
Android:background="@color/tool_bar_color">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal"
Android:gravity="center">
<TextView
Android:id="@+id/toolbar_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:textColor="#fff"
Android:textSize="16sp" />
</LinearLayout>
</Android.support.v7.widget.Toolbar>
Trouver l'identifiant TextView à partir de la barre d'outils
si vous utilisez Activity
TextView mTitle = findViewById(R.id.toolbar_title);
mTitle.setText("set your title");
si vous utilisez Fragment
TextView mTitle = view.findViewById(R.id.toolbar_title);
mTitle.setText("set your title");
Dans votre activité, déclarez la barre d’outils publique.
public class YourActivity : Activity
{
public Toolbar toolbar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = .... // initilize your toolbar
}
}
Puis, de ton fragment
((YourActivity) getActivity()).toolbar.Title = "Your Title";
Vous devez définir le titre en activité commettant le fragment et le renvoyer.
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment, mainFragment).commit();
toolbar.setTitle("ShivShambhu");
return contentFragment;
Cela fonctionne pour moi.