web-dev-qa-db-fra.com

Définir le titre dans la barre d'outils de Fragment dans Android

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 ..

15
AndroidMech

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 .

7
Steffen

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);
34
hemant3370

La réponse est écrite ci-dessous dans la méthode oncreateview de fragments.

getActivity().setTitle("your name");
4
Rahul Nagane

À Kotlin.

En fragment:

(activity as YourActivity).supportActionBar?.title = getString(R.string.your_title)

En activité:

setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
2
CoolMind

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");
2
ANUJ GUPTA

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";
1
lagvjjt

Ce travail pour moi: 

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

toolbar.setTitle("New Title");
1
Mesah Barus
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());
                }
            }
        });
1
Nizam Alam

Si vous utilisez une barre d'outils personnalisée, cela vous aidera à:

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setTitle("Feedback");
1
saigopi

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");
0

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";
0
HeisenBerg

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.

0
Prashant.J