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 :

TabHost + Intent + Activité


Sujet :

Android

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut TabHost + Intent + Activité
    Salut,

    Donc voila j'ai fait un client xmpp (chat)
    il fonctionne par un système d'onglet
    J'ai donc deux classes d'activity en plus de la premières : suivant si c'est un message privé ou si c'est un canal avec plusieurs personne (affiche la liste des gens connectés sur le coté quand on est plusieurs)

    Bref il était sur le point d'aboutir.
    Et la pour une fonction banale je vais peu être devoir remettre en cause tout mon code :/

    En faite j'aurais besoin depuis ma main activity d'avoir un listener pour récupérer l'info disant que l'utilisateur a cliquer sur un user pour le mp (c'est l'activity main qui gère le tab host)

    le listener est pret, encore faut t'il dire a ma classe que j'ai se listener qui est la pour écouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class MainActivity extends TabActivity  implements PacketListener,MyCustomEvents {
       public void AskForChatWith(String DestUser) {
     
       }
    }

    Sauf que quelque part je doit faire l'équivalent de : Foobar.addMonCustomListener(this);
    Ou Foobar serait l'instance de la classe en question MaClasse Foobar = new MaClasse;

    Sauf que voila, de la façon que j'ai fait la fonction qui gère le tabhost je n'est pas accès a l'instance de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         public void AjouterUnTabMultiUser(String NomDuCanal)
        {
                Intent MonIntnt = new Intent(this, ChatMultiTab.class);
     
                TabHost host = getTabHost();
                host.addTab(host.newTabSpec(NomDuCanal).setIndicator(NomDuCanal).setContent(MonIntnt));
        }
    Se code à pour effet de créer un tab, et en plus le TabHost instancie lui même ma classe ChatMultiTab
    Moi je voudrais savoir s'il est possible d'y accéder du coup ? Et comment ?

    l'idée c'est que je puisse y accéder avec quelque chose du type:
    (ChatMultiTab)host.getChildAt(1).getClass().getMethod(...).addMyCustomEvents(this);


    PS : Mon clavier à un soucis, il se peu que des touches est sautées

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Si non la j’essaie une autre approche mais avec des fragment + actionbar

    EDIT: L'approche avec des fragments dans mon cas ce n'est pas top, le fragment ne tourne que dans une activity, à chaque fois qu'il est relancer l'ui l'est aussi

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Si ça peu aider à comprendre la problématique :

    MainActivity.java:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public class MainActivity extends TabActivity  implements PacketListener,MyCustomEvents 
    {
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
     
           //Je minimise au max pour l'example:
           AddMultiChatTab("Bidule");
        }
     
        public void AddMultiChatTab(String ConferenceName)
        {
        	Intent myIntent = new Intent(this, ChatMultiTab.class);
        	myIntent.putExtra("USER",XMPP_USER);
        	myIntent.putExtra("CONF",ConferenceName);
     
            // Le XMPPTCPConnection est dans une variable globale donc la classe ouvert y a acces
            // (putExtra ne permet pas de transmettre "XMPPTCPConnection")
            // Juste USER et CONF que je transmet séparément
     
     
          TabHost host = getTabHost();
          host.addTab(host.newTabSpec(ConferenceName).setIndicator(ConferenceName).setContent(myIntent));
     
          //Ici il faudrait que j'ai acces a l'instance de ChatMultiTab sauf que c'est le tabhost qui l'instancie, 
          //Il me faut sont instance pour appeler addMyCustomEvents(this);
          //Si je ne le fait pas AskForChatWith ne sera jamais associé au listener
          //Donc je ne serais jamais avertis du click sur un user dans la liste d'user..
     
       }
     
       @Override
       public void AskForChatWith(String DestUser) 
       {
           //Venant de mon custom listener : MyCustomEvents
       }
     
    }
    ChatMultiTab.java:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    public class ChatMultiTab extends Activity implements  PacketListener 
    {
     
        MyCustomEvents mMyCustomEvents;
     
        public void addMyCustomEvents(MyCustomEvents listener) 
        {
        	mMyCustomEvents = listener;
            //Fonction qui doit etre appellée depuis la MainActivity pour signaler qu'elle écoute et ou..
        }
     
        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.chat_multi_tab);
     
            Intent myIntent = getIntent();
            UserList 	   = (ListView) findViewById(R.id.UserList);
     
            UserList.setOnItemClickListener(new OnItemClickListener() 
            {
    			@Override
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) 
                            {
    				if (mMyCustomEvents!=null)
    				{
    					String Nick = UserList.getItemAtPosition(arg2).toString();
    					mMyCustomEvents.AskForChatWith(Nick);	
                                            //Ici il declanche l'event		
    				}
    			}
    	});
        }
     
    }
    MyCustomEvents.java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface MyCustomEvents 
    {
    	void AskForChatWith(String DestUser);
    }
    Peu t’ont récupérer l'instance de ChatMultiTab quand le tabhost l'instancie ?
    Si jamais c'est impossible voyez vous un moyen de transmettre une info en retour du ChatMultiTab vers le MainActivity a la façon d'un listener

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Bon au final j'ai trouver une technique, mais c'est plutôt moche.

    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
     
    public class MainActivity extends TabActivity  implements PacketListener,MyCustomEvents 
    {
        static MainActivity bidule = null;
     
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            bidule=this;
        }
        public static void DiscuterAvecUser(String username)
        {
             bidule.[...]
        }
    }
    ça le fait mais bon..

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    L'action bar avec des tabs et des fragments répond à ta problématique , sans compter que le TabHost est déprécié depuis l'API 13.

    EDIT: L'approche avec des fragments dans mon cas ce n'est pas top, le fragment ne tourne que dans une activity, à chaque fois qu'il est relancer l'ui l'est aussi
    Un fragment ça à le même fonctionnement qu'une activity seule (à quelques subtilités près) , donc ce que tu fais actuellement avec X activities tu peux le faire avec X fragments + 1 activity.

    L'avantage c'est que, comme tes fragments dépendent de la même activité, tu peux très simplement les faire communiquer entre eux : http://developer.android.com/trainin...unicating.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/12/2012, 10h13
  2. Intent , nouvelle activité -problème
    Par valpha dans le forum Android
    Réponses: 0
    Dernier message: 15/01/2012, 15h35
  3. Naviguer dans des sous activités dans les tabHosts
    Par Jeby57 dans le forum Android
    Réponses: 3
    Dernier message: 20/05/2011, 17h11
  4. Ouvrir des sous-activités en conservant un tabhost
    Par Melkorus dans le forum Android
    Réponses: 0
    Dernier message: 18/04/2011, 09h51
  5. Accéder à un intent à travers la TabHost
    Par Thomas_S dans le forum Android
    Réponses: 2
    Dernier message: 19/01/2011, 14h23

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