116 votes

getSupportActionBar à l'intérieur du fragment ActionBarCompat

Je démarre un nouveau projet qui utilise la fonction AppCompat/ActionBarCompat en v7 bibliothèque de soutien. J'essaye de comprendre comment utiliser la getSupportActionBar de l'intérieur d'un fragment. Mon activité qui héberge le fragment étend ActionBarActivity mais je ne vois pas de classe de soutien similaire pour les fragments.

De l'intérieur de mon fragment

    public class CrimeFragment extends Fragment {
          //...

          getActivity().getSupportActionBar().setSubtitle(R.string.subtitle); // getSupportActionBar is not defined in the v4 version of Fragment

          //...
    }

La page google pour l'utiliser ( http://Android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html ) dit qu'il ne devrait y avoir aucun changement pour le v4 fragment. Est-ce que je dois couler tous mes getActivity() appels à un ActionBarActivity ? Ça ressemble à une mauvaise conception.

5voto

Basheer AL-MOMANI Points 5565

Dans votre fragment.xml ajouter Toolbar Tag de la bibliothèque de support

 <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

Maintenant, comment pouvons-nous le contrôler depuis MyFragment classe ? voyons voir

à l'intérieur de onCreateView ajoutez ce qui suit

mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);

//add this line if you want to provide Up Navigation but don't forget to to 
//identify parent activity in manifest file
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

et si vous voulez ajouter items à la barre d'outils dans MyFragment vous must ajoutez cette ligne à l'intérieur onCreateView fonction

        setHasOptionsMenu(true);

cette ligne est importante, si vous l'oubliez, Android ne remplira pas les éléments de votre menu.

supposons que nous les identifions dans menu/fragment_menu.xml

après cela, remplacez les fonctions suivantes

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

J'espère que cela vous aidera

0voto

Scott Biggs Points 958

En complément de la réponse de GzDev, si vous disposez déjà de la chaîne, vous pouvez utiliser l'auto-setter de Kotlin :

(activity as AppCompatActivity).supportActionBar?.subtitle = my_string

Et vous pouvez le désactiver en utilisant simplement une chaîne vide.

Notez que cela fonctionne à la fois pour le titre et le sous-titre .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X