android_pfe Posted March 16, 2011 Share Posted March 16, 2011 Bonjour, Je veux créer une variable globale pour l'utiliser partout dans mon code mais je n'arrive pas à le faire.Voilà ce que j'ai fait: public class SMS extends Activity { private static int nbr ; private static long[] tab ; // Le tableau dont j'ai besoin . . . public void onCreate(Bundle savedInstanceState) { nbr = Integer.parseInt(Nombre.getText().toString()); tab = new long[nbr]; // initialisation de tab . . . Ajouter.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { time= Long.parseLong( Delai.getText().toString()); tab[1]=time; . . . Il y'a aucune erreur mais l'éxecution ne se fait que si j'initialise le tableau sous public void onClick,mais je veux l'initialiser sous oncreate afin de pouvoir l'utiliser dans d'autres fonctions dans mon code. En deux mots je veux créer un tableau et l'utiliser partout dans mon code. Merci d'avance de votre aide. Link to comment Share on other sites More sharing options...
dugh Posted March 24, 2011 Share Posted March 24, 2011 Une des méthodes que j'ai trouvé consiste à instancier une classe qui fera office de "globale": class MyApp extends Application { private int nbr ; private long[] tab; public void initTab(int nbItems){ nbr = nbItems; tab = new long[nbr]; // initialisation de tab } public int getNbr(){ return nbr; } public long getItem(int pos){ return tab[pos]; } public void setItem(int pos, long value){ if ((pos>0) && (pos<nbr)) tab[pos] = value; } } class Toto extends Activity { @Override public void onCreate(Bundle B){ ... MyApp appState = ((MyApp)getApplicationContext()); appState.initTab(Integer.parseInt(Nombre.getText().toString())); appState.setItem(0, 1.0); // par exemple.... ... } } Je vous laisse le soin de gérer proprement les exceptions/erreurs, etc... De plus il est nécessaire de déclarer notre classe dans le manifest par l'attribut android:name=".MyApp" de la balise <application> Par exemple: [...] <application android:label="@string/app_name" android:icon="@drawable/icon" android:debuggable="true" android:name=".MyApp"> [...] Petite précision tout de même: j'ai lu quelque part que cette classe passait à null lorsque l'on recevait un coup de fil par exemple pendant que l'application est lancée. Ca ne m'est jamais arrivé, mais c'est à creuser. On doit pouvoir gérer ça en jouant avec les OnPause/OnResume... A bon entendeur Link to comment Share on other sites More sharing options...
bsegonnes Posted March 24, 2011 Share Posted March 24, 2011 A chaque changement d'orientation, tu passes dans ton onCreate() : tu perds tout :-) Le mieux serait un truc du style : public class SMS extends Activity { public static final long[] tab = new long[n] . . . Si ton tableau peut changer de taille, un truc comme çà pourrait faire l'affaire : public class SMS extends Activity { public static long[] tab = null; public void onCreate(Bundle savedInstanceState) { // 1er init du tableau if(savedInstanceState==null) { nbr = Integer.parseInt(Nombre.getText().toString()); tab = new long[nbr]; // initialisati } else { // changement d'orientation : on fait rien ? } ... Ce que je fais en général, j'ai une classe (ou interface) ou je met tout les objets (globaux / statiques / accèssible partout). Afin de pas répartir çà un peut partout dans le code. Plus simple à maintenir. Il est également possible de coder des trucs du stype : class toto { public final static N = 100; public static long[] tab; // init. seulement une fois static { tab = new long[N]; } ... Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.