84 votes

Comment obtenir mon contexte d'activité ?

Je ne comprends pas vraiment comment tout cela fonctionne, alors si j'ai un peu de classe ". A qui ont besoin du contexte d'une classe B qui étend Activity Comment puis-je obtenir ce contexte ?

Je cherche un moyen plus efficace que de donner le contexte comme paramètre à la classe A constructeur. Par exemple, si la classe A va avoir des millions d'instances, nous aurions alors des millions de pointeurs redondants vers les Context alors qu'on devrait pouvoir se contenter d'un seul endroit et d'une fonction getter...

58voto

Gan Points 653

Ok, je vais vous donner un petit exemple de la façon de faire ce que vous demandez

public class ClassB extends Activity
{

 ClassA A1 = new ClassA(this); // for activity context

 ClassA A2 = new ClassA(getApplicationContext());  // for application context. 

}

44voto

hasanghaforian Points 5794

Vous pouvez utiliser Application (classe publique dans le paquet Android.application), c'est-à-dire :

Classe de base pour ceux qui ont besoin de maintenir l'état global de l'application. Vous pouvez fournir votre propre implémentation en spécifiant son nom dans votre fichier AndroidManifest.xml, ce qui entraînera l'instanciation de cette classe sera instanciée pour vous lorsque le processus de votre est créé.

Pour utiliser cette classe, il faut

public class App extends Application {

    private static Context mContext;

    public static Context getContext() {
        return mContext;
    }

    public static void setContext(Context mContext) {
        this.mContext = mContext;
    }

    ...

}

Dans votre manifeste :

<application
        android:icon="..."
        android:label="..."
        android:name="com.example.yourmainpackagename.App" >
                       class that extends Application ^^^

Dans l'activité B :

public class B extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sampleactivitylayout);

        App.setContext(this);
                  ...
        }
...
}

Dans la classe A :

Context c = App.getContext();

Note :

Il n'est normalement pas nécessaire de sous-classer l'application. [ ] les singletons statiques peuvent fournir la même fonctionnalité de manière plus modulaire. modulaire. Si votre singleton a besoin d'un contexte global (par exemple pour enregistrer des récepteurs de diffusion), la fonction ), la fonction permettant de le récupérer peut se voir attribuer un contexte Context qui utilise en interne Context.getApplicationContext() lors de l'utilisation de la fonction construction du singleton.

36voto

JohnB Points 177

La meilleure façon d'obtenir le contexte de l'activité est de mettre .this après le nom de l'activité. Par exemple, si le nom de votre activité est Si le nom de votre activité est SecondActivity son contexte sera SecondActivity.this

2voto

Shark Points 2112

Vous passez le contexte à la classe B dans son constructeur, et assurez-vous de passer getApplicationContext() au lieu de activityContext()

1voto

Helal Khan Points 313

Vous pouvez créer un constructeur en utilisant le paramètre Contexte de la classe A, puis utiliser ce contexte.

Contexte c ;

A(Contexte contextuel){ this.c=contexte }

A partir de l'activité B, vous créez un objet de la classe A en utilisant ce constructeur et en passant par getApplicationContext().

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