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

Composants graphiques Android Discussion :

Créer une activité sur une Listview


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Créer une activité sur une Listview
    Salut!

    Alors voilà, j'aimerais créer une application ou dans le main.xml on affiche une liste, et lorsque l'on clique sur l'un des objets de la liste on lance une nouvelle activity qui va afficher des détails sur l'objet choisi.
    J'ai regardé plusieurs forum pour me faire une idée de la marche à suivre et voici ce que j'ai fait :

    Classe principale :

    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
     
    public class ManagementAlarm extends Activity implements AlarmeAdapterListener{
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            ArrayList<ListAlarme> listP = ListAlarme.getAListOfPersonne();
            AlarmeAdapter adapter = new AlarmeAdapter(this, listP);
            adapter.addListener(this); 
            ListView list = (ListView)findViewById(R.id.listalarme);
            list.setAdapter(adapter);      
     
        	Controller.managementAlarm = this;
        	Controller.ecranActif = this;
     
            Intent intent1 = new Intent(this,DetailAlarm.class);	        
            Controller.intent1 = intent1;
        //    this.startActivity(intent1); 
        }
     
        public void onClick(ListAlarme item, int position) {
    	    Controller.ShowDetailAlarm();
        }
    Comme je souhaite passer par un controlleur pour changer d'activité il y a une classe controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Controller {
     
    	static public ManagementAlarm managementAlarm;
    	static public DetailAlarm detailAlarm;
    	static public Activity ecranActif;
    	static public Intent intent1;
     
    	public static void ShowDetailAlarm(){
    		Controller.ecranActif.startActivityIfNeeded(intent1, 0);
     
    	}
    }
    puis deux autres classes : AlarmeAdapter et DetailAlarm
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    public class AlarmeAdapter extends BaseAdapter{
     
    	private List<ListAlarme> mListA;
    	private Context mContext;
    	private LayoutInflater mInflater;
    	public AlarmeAdapter(Context context, List<ListAlarme> aListA) {
    		  mContext = context;
    		  mListA = aListA;
    		  mInflater = LayoutInflater.from(mContext);
    		}
    	public int getCount() {
    		  return mListA.size();
    		}
     
    	public Object getItem(int position) {
    		  return mListA.get(position);
    		}
     
    	public long getItemId(int position) {
    		  return position;
    		}
    	public View getView(final int position, View convertView, ViewGroup parent) 
    	{
    		  LinearLayout layoutItem;
    		  if (convertView == null) {
    		    layoutItem = (LinearLayout) mInflater.inflate(R.layout.alarme_layout, parent, false);
    		  } 
    		  else 
    		  {
    		  	layoutItem = (LinearLayout) convertView;
    		  }      
    		  TextView alarmeID = (TextView)layoutItem.findViewById(R.id.alarme_id);
    		  TextView alarmeType = (TextView)layoutItem.findViewById(R.id.alarme_type);		            
    		  alarmeID.setText(mListA.get(position).idAlarme);
    		  alarmeType.setText(mListA.get(position).typeAlarme);
    		  if (mListA.get(position).genre == ListAlarme.grave) 
    		  {
    		    layoutItem.setBackgroundColor(Color.RED);
    		  } else 
    		  {
    		  	layoutItem.setBackgroundColor(Color.YELLOW);
    		  }
    			layoutItem.setTag(position);
    			layoutItem.setOnClickListener(new OnClickListener()
    			{
    					@Override
    					public void onClick(View v) 
    					{
    						Integer position = (Integer)v.getTag();
    						sendListener(mListA.get(position), position);						
    					}		        	
    		     }); 
    		        return layoutItem;
    	}		    
        private ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener(AlarmeAdapterListener aListener) 
        {
        	myListListener.add(aListener);
        }
        private void sendListener(ListAlarme item, int position) 
        {
        	for(int i = myListListener.size()-1; i >= 0; i--) 
        	{
        		myListListener.get(i).onClick(item, position);
        	}
        }
    	/**
             * Interface pour écouter les évènements sur le nom d'une personne
             */
    	public interface AlarmeAdapterListener 
    	{
    	  	public void onClick(ListAlarme item, int position);
    	}
    }
    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
     
    public class DetailAlarm extends Activity{
     
    	public Controller controller;
    	public void onCreate(Bundle savedInstanceState) 
    	{ 
    	    super.onCreate(savedInstanceState); 
    	    setContentView(R.layout.detailalarm); 
    	    Controller.detailAlarm = this;
    	    Controller.ecranActif = this;
     
    	   TextView textalarm = (TextView) findViewById(R.id.textview);	   
    	   textalarm.setText(R.id.alarme_id);
     
    	}
    }
    Mon problème est le suivant : Lorsque je lance l'application j'affiche bien ma liste d'alarme (que j'ai créer dans la class ListAlarm mais je ne vous l'ai pas copié) cependant dés que je clique sur un des objets de ma liste, je dois forcer la femeture de l'application ... Des idées de solutions? Merci

  2. #2
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 164
    Par défaut
    Bonjour,
    T'as classe Controller ne sert à rien.

    En plus tu ne prend pas en compte la position, du coup quel que soit l'item cliqué la même action se lance.

    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 void onClick(int position) {
         switch(position){
              case 0 :
                   //Lance l'Activity de ton premier item
              break;
              case 1 :
                   //Lance l'Activity de ton deuxieme item
              break;
              case 2 :
                   //Lance l'Activity de ton troisiemme item
              break;
         }
    }
    Un truc comme ça c'est plus simple et ça marche pas mal.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Si ma classe controller ne sert à rien, comment je peux lancer ma deuxième activité?

    Ta méthode fonctionne (j'ai testé avec l'affichage d'un message toast) merci, mais je n'arrive quand même pas à lancer ma deuxième activité.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu dis que je prend en compte la position mais je ne pense pas que ce soit une erreur, en effet je veux lancer la même activité quelque soit l'objet sur lequel je clique, mais les informations affiché par l'activité seront différents, par exemple je veux récupérer le nom de chaque objet et l'afficher dans un nouveau layout lorsque je clique sur un objet.

    Ai-je quand même besoin de passer par un switch case?

  5. #5
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 164
    Par défaut
    Je comprend absolument pas de quoi tu parles, tu n'as qu'a lancé l'Activity tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Intent intent = new Intent();
    intent.setClass(this, *.class);
    startActivity(intent);
    Tu mets ça dans les case que tu veux et voilà.

    A la limite ça ne doit pas être conseillé, mais tu peux même faire :
    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 void onClick(int position) {
         Intent intent = new Intent();
         switch(position){
              case 0 :
                   intent.setClass(this, activity1.class);
              break;
              case 1 :
                   intent.setClass(this, activity2.class);
              break;
              case 2 :
                   intent.setClass(this, activity3.class);
              break;
         }
         startActivity(intent);
    }
    Mais bon je tenterais pas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai fait ce que tu me conseil, voici mon nouveau code, j'ai même supprimé la classe controler, mais j'ai toujours le même problème, lorsque je clique sur un item de ma listview je dois forcé la fermeture.

    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
     
    public class ManagementAlarm extends Activity implements AlarmeAdapterListener{
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            ArrayList<ListAlarme> listP = ListAlarme.getAListOfPersonne();
            AlarmeAdapter adapter = new AlarmeAdapter(this, listP);
            adapter.addListener(this); 
            ListView list = (ListView)findViewById(R.id.listalarme);
            list.setAdapter(adapter);      
        }
        public void onClick(ListAlarme item, int position) {
        	Intent intenalr1 = new Intent();
        	intenalr1.setClass(this, DetailAlarm.class);
    	     startActivity(intenalr1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class DetailAlarm extends Activity{
    	public void onCreate(Bundle savedInstanceState) 
    	{ 
    	    super.onCreate(savedInstanceState); 
    	    setContentView(R.layout.detailalarm);	   
    	}
    Une idée du problème?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Est-ce qu'il ne faut pas utiliser la méthode OnItemClick plutôt que OnClick?

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Agir sur une activité depuis une View personalisée
    Par grunk dans le forum Composants graphiques
    Réponses: 14
    Dernier message: 09/08/2011, 10h25
  3. probleme avec l'appui sur une touche sur une jframe ou jdialog
    Par jeanfeu dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 05/08/2008, 16h14
  4. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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