IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Utiliser l'instance d'une activité à partir d'une autre classe


Sujet :

Android

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut Utiliser l'instance d'une activité à partir d'une autre classe
    Bonjour, je suis en train d'écrire une application assez conséquente, c'est pourquoi je voudrais gérer mes activités à partir d'une classe centrale, qui pourrait accéder à leurs objets grâce à des instances, Le problème est que je ne sais pas comment faire, ni même si c'est possible.

    Voici un code simplifié de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class Central implements ICore, IAlertListener {
     
        public List<AlertItem> alertList;
        private final AlertActivity alertActivity;
     
        public Central() {
    	alertList = new ArrayList<AlertItem>();
            alertActivity = new AlertActivity();
        }
        public void addAlert(String pTitle) {
            alertList.add(0, new AlertItem(pTitle));
     
            if (alertActivity.getLvAlert() != null) {
    	    ((BaseAdapter) alertActivity.getLvAlert().getAdapter())
                    .notifyDataSetChanged();
            }
        }
        public void showAlertActivity(Activity pPreviousActivity) {
            Intent intent = new Intent(pPreviousActivity, alertActivity.getClass());
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     
            pPreviousActivity.startActivity(intent);
        }
    Ici, j'essaye de créer une variable alertActivity qui me permettrait de notifier à chaque ajout dans alertList, l'adapteur de la listView LvAlert, dans l'activité en question. Le problème c'est que je ne peut pas écouter les ajouts dans l'activité même, d'où mon besoin de notifier la lv à l'extérieur de l'activité à chaque appel de addAlert.

    En apparence, ça marche bien, l'instance de l'activité est acceptée, et quand j'appelle showAlertActivity depuis une autre activité, AlertActivity s'affiche bien. Le problème, c'est que alertActivity.getLvAlert() est toujours égal à null, bien que la liste se remplie en apparence. Je pense donc que mon instance ne sert à rien et que ce n'est pas la bonne façon de faire.

    Quel est la méthode idéale pour accéder aux objets de AlertActivity sans utiliser de méthode statique ?

    Merci d'avance

    PS: cette classe est censée gérer la partie graphique de l'application, et est appelée dans une autre classe qui met en place tous les moteurs du programme (à part cette classe tout est du pur java)

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Bonjour,

    Deux idées:
    - La première est que tes activités étendent ta classe Central. Tu pourras ensuite directement utiliser tes fonctions sans même qu'elle sois statiques.

    - La deuxième est de redéfinir ton application pour avoir une classe global. Cherches comment redéfinir une application en créant une classe étendant Application (ca me donne une idée de tuto ).

  3. #3
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    Merci de ta réponse. J'ai étudié tes deux solutions, mais aucune des deux ne semble convenir. Comment étendre les activités à central alors qu'elles étendent déjà la classe Activity ?
    Ensuite dans le cas de la classe globale, j'ai étendu Central à Application et j'ai placé le listView de AlertActivity dans central. Problème : je ne peux plus utiliser findViewById ni dans l'activité (nullPointerException), ni dans l'application. Comment faire ?

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Pour les deux solution tu t'y prend pas comme il faut

    1) La 1ère tu dois étendre ta classe central par Activity. Ensuite tes activité n'étendrons pas ACtivity mais Central.

    2) Pour la 2ème solution, lorsque tu redéfinis ton application, il faut le déclarer dans ton manifest:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <application
            android:name="com.neopost.MyApplication"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
    Ensuite dans ton activité, il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Central central = ((MyApplication) getApplication ()).getCentral ();
    La ligne si dessus suppose que tu as une classe qui s'appelle MyApplication qui étend Application et qui contient un singleton de la classe Central:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class MyApplication extends Application
    {
    private Central central;
     
    public Central getCentral ()
    	{
    		if (central == null)
    		{
    			central = new Central ();
    		}
    		return (central);
    	}
    }
    Voila !

  5. #5
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    J'ai opté pour la deuxième méthode et ça marche. Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/05/2012, 11h52
  2. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  3. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  4. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo