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 :

Lier un ImageButton à l'item d'une listView plutôt qu'à sa position dans la LV


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut
    Salut à tous,

    Alors voilà, j'ai une listview qui contient 3 textView, et j'ai rajouté un ImageButton, voici le xml des item de la listView:
    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:layout_width="fill_parent" android:layout_height="fill_parent"
    	android:id="@+id/LL_Fond"
    	android:weightSum="1.0">
     
    	<ImageButton 
    		android:layout_width="wrap_content"
    		android:layout_height="50px"
    		android:src="@drawable/star"
    		android:id="@+id/ackbutton"
    		android:visibility="visible"/>
     
    	<TextView
    		android:id="@+id/alarme_id"
    		android:layout_width="wrap_content" 
    		android:layout_height="wrap_content"
    		android:layout_weight="0.3"
    		android:layout_margin="2dip"
    		android:textColor="#000000"
    		android:textSize="25px">
    		</TextView>
     
    	<TextView android:id="@+id/alarme_type"
    		android:layout_width="wrap_content" 
    		android:layout_height="wrap_content"
    		android:layout_weight="0.3"
    		android:layout_margin="2dip"
    		android:textColor="#000000"
    		android:textSize="25px">
    		</TextView>
     
    	<TextView android:id="@+id/alarme_groupe"
    		android:layout_width="wrap_content" 
    		android:layout_height="wrap_content"
    		android:layout_weight="0.3"
    		android:layout_margin="2dip"
    		android:textColor="#000000"
    		android:textSize="25px">
    		</TextView>
     
    </LinearLayout>
    J'ai donc crée une liste d'environ 15 alarmes, et j'ai un menu avec un bouton update qui rajoute une alarme en haut de ma liste.
    Mon ImageButton devient invisible lorsque je clique dessus (j'ai un imagebutton à chaque ligne), mais lorsque je clique sur update, je rajoute bien une nouvelle alarme, avec un id, un type, et un groupe, et j'ai un imagebutton qui apparait sur la ligne , Le problème est le suivant :
    Si par exemple j'ai rendu invisible l'imagebutton à la ligne 2, et que je créé une nouvelle alarme, alors je décale toute mes alarmes (celle à la position 2 passe à la position 3 ...) mais je ne décale pas les imagebutton, ainsi l'imagebutton à la position 2 reste invisible et celle à la position 3 reste visible.

    Ma question serait comment lier mon image button à son alarme dans la liste et non pas à une position? car pour le moment c'est lier à la position dans la liste. Le problème vient-il du xml?

    Ou alors faut-il que je lie chaque imagebutton à "son alarm" dans mon adapter? si c'est cette derniere solution comment faire?

    J'éspère que mes explications étaient clairs, ce n'est pas facile à expliquer quand on ne voit pas le problème =) En tout cas merci d'avance pour votre aide.

    --------EDIT-----------
    Voici le code de mon item "update" la variable varack est un tableau d'entier qui prend la valeur 1 quand l'imagebutton est invisible sinon il faut 0.
    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
    case R.id.update:Toast.makeText(this, " alarms update", Toast.LENGTH_LONG).show();   
    	            //fonctionne mais quand on update décalage des étoiles ack ou non ack!
                 list = (ListView)findViewById(R.id.listalarme);	             
                 adapter = (AlarmeAdapter)list.getAdapter();
                 	 varack[0]=0;             	 
    	             i = i + 1;
     
    	             /**---"Choix" groupe de l'alarme---*/
    	             Random r = new Random();
    	             int valeur = 1 + r.nextInt(4 - 1);
    	             String grpName;
    	             if (valeur == 1){ grpName = "SMS";
    	             }else if (valeur == 2){grpName = "ESD";
    	             }else {grpName = "MAS";}
     
    	             /**---"Choix" priorité de l'alarme---*/
    	             Random r2 = new Random();
    	             int prio = 0 + r2.nextInt(3 - 0);
    	             Log.i("random","ramdon ="+valeur);
    	             if (prio == 0){
    	            	 listP.add(0, new ListAlarme("NEWalarme "+i, "type "+i, grpName, ListAlarme.defaut));
    	             }
    	             else {
    	            	 listP.add(0, new ListAlarme("NEWalarme "+i, "type "+i, grpName, ListAlarme.grave)); 
    	             }	             
    	             /**---Notification des changements---*/       
    	             adapter.notifyDataSetChanged();
                 				  break;
    personne ne sait comment faire pour que mon imageButton soit lier à l'item de la listview et non pas à la position dans la listView? Je n'arrive pas à m'en sortir :s je régle certain problème avec ma variable varack[] mais c'est vraiment un système D pas du tout optimisé :s
    Dernière modification par Feanorin ; 19/07/2011 à 17h29. Motif: .. Même discussion

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Si tu veux qu'on ton imagebutton soir lié à ton alarme alors pourquoi ne pas créer un objet contenant un imagebutton ainsi qu'une alarme puisque c'est ce que tu souhaites. Tu n'auras plus qu'à remplir ton adapter à partir d'une liste de ces objets.

    tu pourra ainsi avoir l'imagebutton associé à ton alarme et non pas à la position de ta listView.

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai rajouté un objet dans ma liste comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public ListAlarme(Object aackbut, String aid, String atype, String agroupe, int aGenre) {
    		idAlarme = aid;
    		typeAlarme = atype;
    		genre = aGenre;
    		grpAlarme = agroupe;	
    		ackbut = aackbut;
    	}
     
    	public static ArrayList<ListAlarme> getAListOfAlarms() {
    		ArrayList<ListAlarme> listAl = new ArrayList<ListAlarme>();
     
    		listAl.add(new ListAlarme("ackbut", "alarme1 ", "type1 ","SMS", defaut));
    		listAl.add(new ListAlarme("ackbut","alarme2 ", "type2 ","ESD", grave));
    Et dans mon adapter je l'ai implémenté de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TextView alarmeID = (TextView)layoutItem.findViewById(R.id.alarme_id);
    		  TextView alarmeType = (TextView)layoutItem.findViewById(R.id.alarme_type);
    		  TextView alarmeGrp = (TextView)layoutItem.findViewById(R.id.alarme_groupe);
    		  ackbutton = (ImageButton)layoutItem.findViewById(R.id.ackbutton);
    		  alarmeID.setText(mListA.get(position).idAlarme);
    		  alarmeType.setText(mListA.get(position).typeAlarme);
    		  alarmeGrp.setText(mListA.get(position).grpAlarme);
    		  ackbutton.setTag(mListA.get(position).ackbut);
    Mais le problème reste le même, est-ce qu'il fallait bien utilisé un setTag dans ce code?

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Mais le problème reste le même, est-ce qu'il fallait bien utilisé un setTag dans ce code?

    Euh , tu peux , mais il me semble que maintenant comme tu as ton Image Button dans ton objet qui compose ta liste tu es capable maintenant de savoir si tu dois le cacher ou le montrer, non ?


    A quel moment tu le caches d'ailleurs ton Imagebutton ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je réussisais déja à l'afficher ou le cacher avant. Par défaut le bouton est afficher au début et dés que je clique dessus je le cache.
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ackbutton.setOnClickListener(new OnClickListener(){
    			@Override
    			public void onClick(View v) {
    				if(ManagementAlarm.varack[position] == 0){
    					Toast.makeText(mContext, "the alarm : "+ManagementAlarm.listP.get(position).idAlarme+" is ack", Toast.LENGTH_LONG).show();
    					v.setVisibility(4);
    					ManagementAlarm.varack[position] = 1;
    					layoutItem.setFocusable(true);
    				}
    				else{
    					Toast.makeText(mContext, "you have already ack "+ManagementAlarm.listP.get(position).idAlarme, Toast.LENGTH_LONG).show();					
    				}
    			  }			
    		});
    La variable varack me permet de faire des tests (par exemple je ne peux supprimer un item de ma liste que si varack[de cette position]=1, soit si le bouton n'est plus visible)

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Je pense que tu devrais plutôt gérer le mode visible/invisible directement depuis ton adapter et non pas depuis le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void onClick(View v) {
    .

    Cela te permettra d'avoir un suivi sur tes objets.
    En gros dans le procédure onClick , tu notifies à ton objet que son bouton devient invisible (via une variable menbre de cet objet). puis tu notifie à ton adapter un changement.

    Ensuite dans cet adapter lors de l'affichage de la vue (GetView) tu regardes le mode de ton bouton et tu le cache ou le rends visible en fonction de la variable menbre de l'objet.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/03/2008, 14h54
  2. [VBA] événements souris sur un item d'une listview
    Par DJBORIE dans le forum VBA Access
    Réponses: 11
    Dernier message: 13/04/2007, 15h08
  3. Espace entre item d'une listview
    Par diaboloche dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/02/2007, 18h01
  4. [VB.NET] Associer nouveaux items a une ListView
    Par size_one_1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/12/2006, 14h32
  5. Changer dynamiquement la couleur d'un item d'une listview
    Par little_cypress dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2004, 14h46

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