web-dev-qa-db-fra.com

Impossible d'obtenir la barre d'actions dans la classe de fragments

J'ai une activité avec trois classes de fragments à l'intérieur. J'obtiens une erreur lorsque j'essaye de changer le titre de la barre d'actions à l'intérieur d'eux. Si j'essaie de rendre les classes publiques et non publiques statiques, j'obtiens une erreur lorsque j'essaie de démarrer cette classe. Il devrait être assez clair que le code est pour les préférences bien que cela ne devrait rien changer. Voici le code:

package com.simon.wikiics;

import Android.preference.*;
import Android.os.*;
import Java.util.*;

public class MainSettingsActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public void onBuildHeaders(List<Header> target) {
    loadHeadersFromResource(R.xml.headers, target);
}

//If I don't make the classes static my app force closes when I try to start them
public static class NavigationSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.navigation);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Navigation");

    }
}

public static class InterfaceSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.interf);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Interface");
    }

}

public static class OtherSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.other);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Other");
    }
}
}
30
SweSnow

Une classe statique ne peut pas voir les champs privés d'une autre classe. Vous devrez utiliser getActivity().getActionBar() pour le récupérer.

49
ahodder

@Robert Estivil Si vous utilisez AppCompatActivity alors utilisez ceci:

actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
50
Arul Pandian

Bien que je sois en retard pour répondre ici. J'ai trouvé la réponse d'Arul parfaite, mais maintenant ActionbarActivity est obsolète, donc une légère modification de cette réponse terminera le travail:

ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
12

Avec AppCompatActivity, il est conseillé de passer à Toolbar au lieu de la barre d'action, mais si vous ne le faites pas, utilisez-le pour obtenir une instance de la barre d'action.

((AppCompatActivity )getActivity()).getSupportActionBar();
2
war_Hero

si vous utilisez SherlokActionBar, vous pouvez appeler votre barre d'action en utilisant

ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();
0
Mohamed Hussien