web-dev-qa-db-fra.com

Définir le titre de la barre d'outils

J'essaie de définir le titre de ma barre d'outils comme suit:

public class StatisticsPage extends Fragment  {

    public StatisticsPage(){}
    private FragmentTabHost mTabHost;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.statistics_pagelayout, container, false);

        Spinner spinner = (Spinner) rootView.findViewById(R.id.statsSpin);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
                R.array.statspage, R.layout.dropdown_item);
        spinner.setAdapter(adapter);
        getSupportActionBar().setTitle("My title");

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {

                switch (position) {
                    case 0:
                        break;
                    case 1:
                        // do whatever stuff you wanna do here
                        Fragment Fragment_one;
                        FragmentManager man= getActivity().getSupportFragmentManager();
                        FragmentTransaction tran = man.beginTransaction();
                        Fragment_one = new BreweryStatistics();
                        tran.replace(R.id.main, Fragment_one);//tran.
                        tran.addToBackStack(null);
                        tran.commit();
                        break;
                    case 2:
                        Fragment Fragment_two;
                        FragmentManager mantwo= getActivity().getSupportFragmentManager();
                        FragmentTransaction trantwo = mantwo.beginTransaction();
                        Fragment_two = new StyleStatistics();
                        trantwo.replace(R.id.main, Fragment_two);//tran.
                        trantwo.addToBackStack(null);
                        trantwo.commit();
                        break;
                    case 3:
                        Fragment Fragment_three;
                        FragmentManager manthree= getActivity().getSupportFragmentManager();
                        FragmentTransaction tranthree = manthree.beginTransaction();
                        Fragment_three = new TasteStatisticsPage();
                        tranthree.replace(R.id.main, Fragment_three);//tran.
                        tranthree.addToBackStack(null);
                        tranthree.commit();
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }
        });

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
        String userName = prefs.getString("userName", null);
        String userID = prefs.getString("userID", null);
        String url = "myURL";
        String userURLComp = "u=" + userID;

        url = url + userURLComp ;

        new getBasicStats(getActivity()).execute(url);

        return rootView;
    }
}

Fondamentalement, cette ligne dans le code ci-dessus ne fonctionne pas dans le fragment:

getSupportActionBar().setTitle("My title");

Aussi, comment puis-je empêcher le titre de mon application de s'afficher dans la barre d'applications? Je voudrais aussi rendre le titre blanc lorsque je peux le définir.

13
Mike

Le changer en

((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Home");

Vous deviez dire à l'activité qu'il s'agissait d'une AppCompatActivity.

Ensuite, vous utilisez getActivity() pour obtenir l'activité principale puisque vous êtes dans un fragment.

Ensuite, définissez le titre comme d'habitude.

58
Tristan Wiley

En kotlin

(activity as? AppCompatActivity)?.supportActionBar?.title = "title"

Edit: Ajouté l'opérateur sûr null ? pour éviter NullPointer au cas où ActionBar ne serait pas disponible 

3
Ali hasan

En fait, vous pouvez simplement faire ce qui suit:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    getActivity().setTitle("My title");
}

Je fais le changement dans onActivityCreated car l'activité n'a peut-être pas encore été complètement initialisée dans onCreateView. Dans onActivityCreated, il n'y a aucun risque d'obtenir un NullPointerException.

NOTE: J'utilise une AppCompatActivity avec une Toolbar et une v4 Fragments qui lui sont associées.

3
Yoann Hercouet

Kotlin a défini le titre des ressources

Activité:

setTitle(R.string.some_title)

Fragment:

activity?.setTitle(R.string.some_title)
1
Andrey

Pour ce faire, la meilleure et la plus simple consiste à ouvrir le manifeste Android et à modifier la variable label dans la section Activity. C'est ce qui est responsable de l'étiquetage de l'activité le long de la barre d'outils. Cela vous évite d’écrire des lignes de code dans le fichier de classe.

1
AndroidDevBro