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 :

Ajouter une saisie utilisateur sur une ListView


Sujet :

Composants graphiques Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Par défaut Ajouter une saisie utilisateur sur une ListView
    Bonsoir,

    Je débute actuellement sur la programmation Android et je me retrouve devant un problème :

    J'aimerais pouvoir ajouter sur une ListView une saisie utilisateur (EditText) lorsque ce dernier appui sur un bouton.

    Le problème c'est que lorsque que j'appui sur ce bouton l'application crash

    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
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
     
    public class CoursesAfaire extends Activity
    {
     
        private Button valider ;
        String[] listeDesProduits = new String[] {};
     
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.courses_a_faire);
     
            valider = (Button)findViewById(R.id.bouton_valider);
     
            EditText nouveauProduit = (EditText)findViewById(R.id.edit_article_ajouter);
            final String texteNouveauProduit = nouveauProduit.getText().toString();
     
            valider.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    listeDesProduits[1] = texteNouveauProduit ;
                }
            });
     
            //Création de l'adapter
            ArrayAdapter<String> adapterLaListe = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, listeDesProduits);
     
            //Récupération du ListView présent dans notre IHM
            ListView list = (ListView)findViewById(R.id.liste_courses);
     
            //On passe nos données au composant ListView
            list.setAdapter(adapterLaListe);
     
        }
    }
    Sur la ligne " listeDesProduits[1] = texteNouveauProduit ; " je veux écrire sur la première case (qui correspondra à la première ligne de la liste) le texte saisie par l'utilisateur mais je pense que la manière dont je le fais n'est pas bon, surtout lorsque que l'utilisateur voudra ajouter un autre mot...

    Est ce que quelqu'un pourrait m'aiguiller sur la façon de procéder ?

    Merci d'avance

  2. #2
    Membre habitué Avatar de Flyzzx
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Salut,

    Essaie déjà de sortir ton objet EditText de la porté de la méthode onCreate (met le en attibut de classe comme ton bouton).

    Ensuite tu dois récupérer la valeur de ton editText quand tu clique sur ton bouton (donc tu dois récupérer la valeur dans méthode onClick())

    Et essaie aussi de mettre ton adapter avant ton listener, et d'appeler la méthode add de l'adapter

    Peux tu poster le log de l'erreur que tu as quand ton appli crash ?

    Merci

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Par défaut
    Voilà je viens de modifier un peu mon code en utilisant tes conseils, seulement pour la méthode add de l'Adapter j'ai encore rien trouvé qui me permette de comprendre clairement l'utilisation du coup j'ai essayer de faire sans même si par la suite je vais continuer mes recherches pour trouver des explications plus "Adapter" pour moi
    J'ai toujours le crash et voici le Log :

    FATAL EXCEPTION: main

    java.lang.ArrayIndexOutOfBoundsException: length=0; index=1
    at org.valogic.recette.CoursesAfaire$1.onClick(CoursesAfaire.java:36)
    at android.view.View.performClick(View.java:4789)
    at android.view.View$PerformClick.run(View.java:19881)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5294)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
    En espérant que cela puisse t'éclairer ^^

    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
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
     
    public class CoursesAfaire extends Activity
    {
        private Button valider ;
        private EditText nouveauProduit ;
        private String[] listeDesProduits = new String[]{};
        private ListView list ;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.courses_a_faire);
     
            valider = (Button)findViewById(R.id.bouton_valider);
            nouveauProduit = (EditText)findViewById(R.id.saisie_article_ajouter);
            list = (ListView)findViewById(R.id.liste_courses);
     
            ArrayAdapter<String> adapterLaListe = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, listeDesProduits);
     
            valider.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    listeDesProduits[1] = nouveauProduit.getText().toString(); ;
                }
            });
     
            list.setAdapter(adapterLaListe);
     
        }
     
    }

  4. #4
    Membre habitué Avatar de Flyzzx
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Bonjour,

    Ton application crash car tu essais d'appeler un index de ton tableau qui n'existe pas, d'où l'exception "java.lang.ArrayIndexOutOfBoundsException: length=0; index=1".
    Celà vient du fait que tu stock tes données dans un tableau de String et non dans une Liste. La différence est que pour un tableau, tu dois soit spécifié la taille de ce dernier, soit assigner des valeurs directement lors de l'instanciation ou alors lui assigner directement un autre tableau.
    Dans ton cas tu appel l'index 1 alors qu'il n'existe pas. Il faudrait plutôt que tu utilises un objet ArrayList<String> qui te permettra d'ajouter et supprimer le contenu dynamiquement.
    Quand tu instancie ton adapter tu lui passe la liste dans laquelle vont être stocké les données, donc tu peux depuis l'adapter modifier ta liste très simplement.

    Il y a deux façon de faire : soit tu appel la méthode add de ton objet liste, mais dans ce cas il faudrat appeler la méthode notifyDataSetChanged() de l'adapter pour lui dire que les données ont été modifiés, ou alors tu appel la méthode add de l'adapter qui appel elle même la méthode notifyDataSetChanged() (à vérifier)

    J'ai modifié un petit peu ton code (je ne l'ai pas testé je n'ai pas eu le temps) :
    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
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
     
    public class CoursesAfaire extends Activity
    {
        private Button valider ;
        private EditText nouveauProduit ;
        private ArrayList<String> listeDesProduits;
        private ListView list ;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.courses_a_faire);
     
    		//On instancie la liste
    		listeDesProduits = new ArrayList<String>();
     
            valider = (Button)findViewById(R.id.bouton_valider);
            nouveauProduit = (EditText)findViewById(R.id.saisie_article_ajouter);
            list = (ListView)findViewById(R.id.liste_courses);
     
    		//On instancie l'adapter
            ArrayAdapter<String> adapterLaListe = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, listeDesProduits);
     
    		//On l'ajoute à la listview
    		list.setAdapter(adapterLaListe);
     
            valider.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    String saisie = nouveauProduit.getText().toString();
    				//On vérifie que la saisie n'est pas vide
    				if(!saisie.isEmpty()) {
    					//On appel la méthode add de l'adapter
    					adapter.add(nouveauProduit.getText().toString());
    				}
                }
            });
        }
     
    }

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Par défaut
    Bonjour,

    Je viens de tester ton code, c'est bon ça marche parfaitement !
    Du coup je comprend un peu mieux le fonctionnement de l'adapter.
    Maintenant je pense que je vais me pencher sur SQLite pour enregistrer tout ça..

    En tout cas merci a toi et bonne journée !

  6. #6
    Membre habitué Avatar de Flyzzx
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Oui l'adapter permet de faire la liaison entre tes données et ta view
    Content d'avoir pu t'aider,
    Bonne journée

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

Discussions similaires

  1. [MVVM] Créer un contrôle utilisateur représentant une zone éditable sur une carte
    Par profou dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 14/01/2016, 05h45
  2. Imprimer sur une page web sur une imprimante spécifique
    Par bleuerouge dans le forum Windows Forms
    Réponses: 0
    Dernier message: 07/12/2009, 09h51
  3. Pb sur une requête DELETE sur une chaine
    Par astrolane dans le forum Sybase
    Réponses: 4
    Dernier message: 16/02/2009, 09h11
  4. Réponses: 3
    Dernier message: 25/10/2007, 11h47
  5. [VBA-EXCEL]bloquer la saisie utilisateur sur une colonne
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2006, 14h37

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