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 :

Récupérer id des items cochés [Débutant(e)]


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Récupérer id des items cochés
    Bonjour,

    J'essaye de récuperé la position des items dont la checkbox est coché. J'ai crée ma boucle, elle est parcouru jusqu'au 1er item checked, ça l'ajoute dans l'arrylist, mais ensuite la boucle continue sans reperé les autres items checked, et je me retrouve donc avec un seul id dans l'arrayList. Je ne trouve pas l'erreur que j'ai pu 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
    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 AjouterCritereProduit extends Activity{
     
    	private ArrayAdapter<String> ProductsAdapter;
    	private ListView lvProducts;
    	private List<String> allProducts = new ArrayList<String>();
     
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.ajouter_critere_produit);
     
    		Bundle extra = new Bundle();
    		extra = getIntent().getExtras();
    		final long id_test = extra.getLong("id");
    		final int id_critere = DBManager.sharedManager().getIdCritere();
     
    		lvProducts = (ListView) findViewById(R.id.listProductCritere);
    		allProducts = DBManager.sharedManager().getAllProducts();
    	    ProductsAdapter = new ArrayAdapter<String>(AjouterCritereProduit.this,android.R.layout.simple_list_item_multiple_choice, allProducts);
    	    lvProducts.setAdapter(ProductsAdapter);
    	    lvProducts.setItemsCanFocus(false);
    	    lvProducts.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
     
    	    final Button buttonRecord = (Button) findViewById(R.id.buttonRecordProductCritere);
    	    buttonRecord.setOnClickListener(new OnClickListener() {
     
    			public void onClick(View v) {
     
    				ArrayList<Long> recordLv = new ArrayList<Long>();
    				int count = lvProducts.getAdapter().getCount();
    				long position = 0;
    				for (int i = 0; i <= count; i++)
    				{
    					if (lvProducts.isItemChecked(i))
    					{
    						position = lvProducts.getItemIdAtPosition(i);
    						recordLv.add(position);
    					}
    					i++;
    				}
    Merci d'avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    En fait... il y a deux parties:

    1. Pourquoi faire le truc à chaque "check" ?

    2. Pourquoi ne pas utiliser ListView.getCheckedItemPositions() ?
    Ou encore mieux:
    ListView.getCheckedItemIds()......
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut
    Déjà ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 0; i <= count; i++)
    c'est une erreur basique qui fait que tu ne traiteras pas ton dernier élément, remplace déjà par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 0; i < count; i++)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé avec getCheckedItemIds (), mais ça me retournais aucun id...
    Et concernant getCheckedItemPositions(), je n'ai pas vraiment compris comment ça fonctionnait vu qu'il renvoit un tableau de boolean..

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par zouky Voir le message
    J'ai essayé avec getCheckedItemIds (), mais ça me retournais aucun id...
    Peut etre parce que l'adapter ne dit pas qu'il a des IDs stables (regarde la doc)
    Adapter.hasStableIds() doit retourner 'true' pour que cette fonction marche. Mais c'est vraiment la plus simple à utiliser....

    A noter qu'Android a quelques optimisations additionelles si l'adapter définit hasStableIds() (par exemple il ne passera plus dans le getView() si l'ID correspond à celui de la View existante). Donc il faut *vraiment* le faire dès qu'on a un identifiant stable/unique pour chaque item.

    Et concernant getCheckedItemPositions(), je n'ai pas vraiment compris comment ça fonctionnait vu qu'il renvoit un tableau de boolean..
    Ben, c'est un tableau de boolean !
    Au lieu de faire lvProducts.isItemChecked(i) il suffit de faire sparseArray.get(i)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    J'ai regardé le code un peu plus en détails...

    Déjà tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProductsAdapter = new ArrayAdapter<String>(AjouterCritereProduit.this,android.R.layout.simple_list_item_multiple_choice, allProducts);
    Outre le fait de voir une variable en CamelCase, nom réservés aux types java traditionnellement, il n'y a *aucun* identifiant dans cet adapter...
    Comme derrière tu utilises:
    lvProducts.getItemIdAtPosition(i);
    Je doute que tu reçoives autre chose que 0....
    Je pense qu'il te suffise de stocker la position (et non l'ID de l'item puisqu'il y en a pas !)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Donc la meilleur façon serait d'override la méthode hasStableIds()?

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Encore faudrait-il que tu ais les ids ! (mais la position devrait suffire)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Ca marche parfaitement.
    Merci

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

Discussions similaires

  1. [Débutant] récupérer liste des checkbox cochés
    Par Veidt dans le forum Windows Phone
    Réponses: 1
    Dernier message: 16/07/2013, 09h30
  2. [c#] Récupérer dernier item coché dans CheckBoxList
    Par Filippo dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/02/2007, 15h42
  3. Réponses: 6
    Dernier message: 05/10/2006, 17h04
  4. [vb.net][dataview] récupérer l'index des items filtrés ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/01/2006, 15h55
  5. Récupérer la liste des items d'un champs
    Par korntex5 dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/01/2006, 15h50

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