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 :

ListView Dynamique, je bloque.


Sujet :

Composants graphiques Android

  1. #1
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2015
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2015
    Messages : 96
    Par défaut ListView Dynamique, je bloque.
    Bonjour,,
    Ce n'est pas très original, mais je n'arrive pas à trouver la solution même en cherchant sur internet.
    Je ne me fais pas d'illusion, je suis un débutant débutant depuis houlala, mais toujours aussi nul.

    Le but c'est d'afficher ma listView, une fois que les 2 EditText soit renseignés.
    Je vous joints le code, je pense que cela vous sera utile ...

    code 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
    public class MainActivity extends Activity {
     
     
      //  ArrayList<String> list = new ArrayList<>();
        String mot1 = "";
        String value;
     
     
        private Quiz adapter;
     
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
     
            setContentView(R.layout.activity_main);
     
     
            Button btn = (Button) findViewById(R.id.btnAdd);
     
     
            OnClickListener listener = new OnClickListener() {
                @Override
                public void onClick(View v) {
                    EditText edit = (EditText) findViewById(R.id.txtItem);
                    EditText edit2 = (EditText)findViewById(R.id.txtItem2);
                    TextView tv1 = (TextView)findViewById(R.id.tv_1);
                    TextView tv2 = (TextView)findViewById(R.id.tv_2);
     
                    mot1 = edit.getText().toString();
                    value = edit2.getText().toString();
     
                   tv1.setText (edit.getText().toString()) ;
                    tv2.setText(edit2.getText().toString());
     
                  adapter = new Quiz(this,R.layout.list_items,
                          new ArrayList<Quiz>());
                    ListView mylist = (ListView)findViewById(R.id.list);
                    mylist.setAdapter((ListAdapter) adapter);
     
                    adapter.insert( new Quiz( edit,edit2), 0);
                }
            };
     
            /*
            Setting the event listener for the add button
            btn.setOnClickListener(listener);
     
           Setting the adapter to the ListView
            setListAdapter(adapter);
     
        }*/
    Code Class
    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
    public class Quiz implements Serializable {
     
        private EditText mot1;
        private String value;
      //  private String corrige ="";
     
        public Quiz(EditText mot1, EditText value) {
            this.setMot1(mot1);
            this.setValue(value);
        }
     
        public Quiz(View.OnClickListener onClickListener, int list_items, ArrayList<Quiz> quizs) {
     
        }
     
        public String getMot1() {
            return String.valueOf(mot1);
        }
     
        public void setMot1(EditText mot1) {
            this.mot1 = mot1;
        }
     
        public String getValue () {
            return String.valueOf(value);
        }
     
        public void setValue(EditText value) {
            this.value = String.valueOf(value);
        }
     
        public void insert(Quiz quiz, int i) {
     
        }
    }
    Merci à vous .

  2. #2
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut

    Qu'est-il censé se passer lorsque tu cliques sur le bouton ?

  3. #3
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2015
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2015
    Messages : 96
    Par défaut
    Citation Envoyé par Drowan Voir le message

    Qu'est-il censé se passer lorsque tu cliques sur le bouton ?

    Les mots entrés dans les EditText doivent s'afficher dans la ListView,
    Et je recommence un mot dans un EditText, un mot dans le 2eme EditText,
    ainsi de suite, jusqu'à une limite qui sera fixée.

    Merci pour la réponse

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    salut,

    Donc tu nous dit que que lorsque tes 2 EditText sont remplie et que tu appuie sur le boutton, ils sont censé s'afficher dans ta Listview, dans ce cas a quoi sert les TextView que tu as placé dans ton code ??

    Ensuite pour que lorsque un click sur le boutton, le code est généralement ceci :
    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
            Button btn = (Button) findViewById(R.id.btnAdd);
            btn.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick (View v)
                {
                    EditText edit = (EditText) findViewById(R.id.txtItem);
                    EditText edit2 = (EditText) findViewById(R.id.txtItem2);
                    TextView tv1 = (TextView) findViewById(R.id.tv_1);
                    TextView tv2 = (TextView) findViewById(R.id.tv_2);
     
                    mot1 = edit.getText().toString();
                    value = edit2.getText().toString();
     
                    tv1.setText(edit.getText().toString());
                    tv2.setText(edit2.getText().toString());
     
                    adapter = new Quiz(this, R.layout.list_items, new ArrayList<Quiz>());
                    ListView mylist = (ListView) findViewById(R.id.list);
                    mylist.setAdapter((ListAdapter) adapter);
     
                    adapter.insert(new Quiz(edit, edit2), 0);
     
                }
            });
    Puis je vois que tu as un donc crée un custom adapter (ta class quizz), pourquoi pas, bien que ça ne sert pas a grand chose dans ton cas.
    Mais vue ton niveau pour l'instant je te dirai d'utiliser juste le classe ArrayAdapter, qui s'utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, list)
    Le 1er parametre est le Context, le second est le layout, celui que j'ai utilisé est un layout déja fabriqué par android donc pas besoin de le crée et le 3 et ta list qui est censé etre de type ArrayList<String.

    Ce que tu peux donc faire c'est que une fois que tu as cliquer sur le boutton pour ajouter les elements a ta ListView, tu récupere ce que tu as écris et tu l'ajoute a ta list avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    EditText edit = (EditText) findViewById(R.id.txtItem);
    EditText edit2 = (EditText) findViewById(R.id.txtItem2);
     
    mot1 = edit.getText().toString();
    value = edit2.getText().toString();
     
    list.add(mot1);
    list.add(value);
    ensuite tu peux set ton Adapter, et lorsque tu veux actualiser ta list tu fait ajoute donc tes elements a ta list et tu fait :

    adapter. notifyDataSetChanged();

  5. #5
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2015
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2015
    Messages : 96
    Par défaut
    Merci pour la réponse et les conseils...
    .

    Mes TextView sont (enfin je le pensais) pour faire le modèle d'une ligne de ma listView
    Je suis un grand débutant et c'est en piochant un peu partout que j'ai fait ce début de code.

    Je vais me mettre à travailler sur vos conseils et je reviends au cas ou ...
    A+

    encore merci

  6. #6
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2015
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2015
    Messages : 96
    Par défaut
    Bonjour,

    Voilà, après quelques heures à merdoyer dans la semoule, j'ai réussi à faire afficher quelque sur ma listView.

    Je me suis aperçu de trucs qui me gêne :
    les "EditText" s'inscrivent dans la list les uns sous les autres, alors que le but est qu'ils soient sur la même ligne.

    Ensuite, lorsque je recommence l'opération, les nouveaux "EditText" remplacent les anciens sur la liste au lieu de s'ajouter.

    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
     
    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.ListAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
     
    import java.util.ArrayList;
     
     
    public class MainActivity extends Activity {
     
        /** Items entered by the user is stored in this ArrayList variable */
      //  ArrayList<String> list = new ArrayList<>();
        String mot1;
        String value;
        ListView mylist;
        ArrayList<String> list = new ArrayList<String>();
     
     /** Declaring an ArrayAdapter to set items to ListView */
       // private Quiz adapter;
     
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            EditText edit = (EditText) findViewById(R.id.txtItem);
            EditText edit2 = (EditText) findViewById(R.id.txtItem2);
            TextView tv1 = (TextView) findViewById(R.id.tv_1);
            TextView tv2 = (TextView) findViewById(R.id.tv_2);
     
     
            /*     ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout., list);
                    ListView list = (ListView) findViewById(R.id.list);
                    list.setAdapter( (ListAdapter) adapter);
                    */
     
            Button btn = (Button) findViewById(R.id.btnAdd);
            btn.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick (View v)
                {
                    ArrayList<String> list = new ArrayList<String>();
     
                    EditText edit = (EditText) findViewById(R.id.txtItem);
                    EditText edit2 = (EditText) findViewById(R.id.txtItem2);
     
                    mot1 = edit.getText().toString();
                    value = edit2.getText().toString();
     
     
                    ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, list);
     
                   // adapter = new Quiz(this, R.layout.list_items, new ArrayList<Quiz>());
                    ListView mylist = (ListView) findViewById(R.id.list);
                    mylist.setAdapter((ListAdapter) adapter);
     
                    list.add(mot1);
                    list.add(value);
     
                    adapter.notifyDataSetChanged();
                    edit.setText("");
                    edit2.setText("");

    A la ligne 60, j'ai essayé de mettre :
    ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,R.layout.list_item, list);
    Mais il me demandait les TextView.
    J'ai essayé mais j'ai réussi qu'à mettre le bazard dans le code ...

    C'est pourtant par cette solution qu'il faut passer pour avoir mes lignes avec mes 2 (ou 3 ) éléments.

    Merci
    A +

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    Bonjour,

    Il faut que tu arrête avec tes EditText, on ne les utilise pas pour afficher les mots dans la ListView

    Mise a par ça il y a d'autre petite erreur, tu initialise ton ArrayList a chaque fois que tu click sur le boutton, ça veux dire qu'a chaque fois tu crée un nouveau ArrayList donc par conséquent vue que c'est une nouvelle list, il n'y a rien dedans, conséquence, tu perd tes valeur.

    ensuite lorsque tu fait list.add(mot1), c'est mieux de le faire avant de crée ton adapteur, car c'est ton adapteur qui vas se charger de crée ta listview, donc si tu lui passe une list vide il ne vas rien t'afficher, surtout qu'apres comme je t'ai dit tu crée une nouvelle list, donc les valeur que tu add ne sont jamais utilisé

    Puis, ça ne sert a rien de caster ton adapter quand tu fait myList.setAdapter

    et pour finir je me suis tromper, je viens de crée le code, il marche parfaitement et tu n'a finalement pas besoin de adapter.notifyDataSetChanged();

    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
    public class MainActivity extends AppCompatActivity
    {
     
     
        String mot1;
        String value;
        ArrayList<String> list = new ArrayList();
        ArrayAdapter adapter;
     
        @Override
        public void onCreate (Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
     
            Button btn = (Button) findViewById(R.id.btnAdd);
            assert btn != null;
            btn.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick (View v)
                {
                    EditText edit = (EditText) findViewById(R.id.txtItem);
                    EditText edit2 = (EditText) findViewById(R.id.txtItem2);
     
                    mot1 = edit.getText().toString();
                    value = edit2.getText().toString();
     
                    if (!mot1.isEmpty())
                    {
                        list.add(mot1);
                    }
                    if (!value.isEmpty())
                    {
                        list.add(value);
                    }
     
     
                    adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, list);
                    ListView mylist = (ListView) findViewById(R.id.list);
                    mylist.setAdapter(adapter);
                }
            });
     
        }
    }

    puis mon XML :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context="com.example.mavrick.test.MainActivity">
     
     
        <EditText
            android:id="@+id/txtItem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
     
        <EditText
            android:id="@+id/txtItem2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
     
        <Button
            android:id="@+id/btnAdd"
            android:text="Ajouter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
     
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>

  8. #8
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Bonjour,

    @Carus et @mavriick42, le meilleur endroit pour inflater les views est la méthode onCreate()... pas dans les événements. Sortez la récupération des deux editText de onClick du bouton et mettez les dans onCreate de l'activity .

    Voici la version simplifiée sans custom Adapter :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public class MainActivity extends AppCompatActivity {
     
        //SearchView searchView;
     
        //Déclaration des composants graphiques
        EditText txt_mot_1, txt_mot_2;
        Button btn_ajout;
        ListView lstv_list;
        //Adaptateur
        ArrayAdapter<String> adapter;
     
        //Déclaration des variables
        String mot_1, mot_2;
        //Liste des mots
        ArrayList<String> list_mots = new ArrayList<>();
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            //Inflater une et une seule fois toutes les views...
            txt_mot_1 = (EditText)findViewById(R.id.txt_mot_1);
            txt_mot_2 = (EditText)findViewById(R.id.txt_mot_2);
            btn_ajout = (Button)findViewById(R.id.btn_ajout);
            lstv_list = (ListView)findViewById(R.id.lstv_list);
            //Création de l'adaptateur
            adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list_mots);
            //Passation de l'adaptateur à la listView
            lstv_list.setAdapter(adapter);
     
            //Gestion de clic sur le bouton
            btn_ajout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Récupérer les données saisies
                    if(txt_mot_1.getText().toString().equals("") || txt_mot_2.getText().toString().equals("")){
                        Toast.makeText(MainActivity.this, "Remplissez les champs de saisie svp!", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    mot_1 = txt_mot_1.getText().toString();
                    mot_2 = txt_mot_2.getText().toString();
     
                    //Ajouter les mots dans la liste
                    list_mots.add(mot_1);
                    list_mots.add(mot_2);
                    //Remettre le focus au premier champ
                    txt_mot_1.requestFocus();
     
                    //Mise à jour de la listView
                    adapter.notifyDataSetChanged();
     
                    //Réunitialisation des champs
                    txt_mot_1.setText("");
                    txt_mot_2.setText("");
     
                }
            });
     
        }
    }

    Et le layout utilisé activity_main :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.christianmbangala.brigthsolution.search.MainActivity"
        android:orientation="vertical">
     
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Premier mot"
            android:id="@+id/txt_mot_1"/>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Deuxième mot"
            android:id="@+id/txt_mot_2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btn_ajout"
            android:text="Ajouter"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Liste des mots : "
            android:textStyle="bold"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="10dp"/>
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/lstv_list"/>
    </LinearLayout>
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  9. #9
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2015
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2015
    Messages : 96
    Par défaut
    Merci à vous pour les réponses et conseils

    Il ne me reste qu'un tuyau a avoir :
    comment faire pour que la liste affichée soit sur 1 ligne.
    Exemple :
    maison lion.

    Cela est très important pour la suite.

    Précision, il s'agit d'un quiz on va dire.
    Je pioche un mot dans une liste.
    Ce mot s'affiche c'est le 1er mot ( je sais faire)
    j'ecris la répnse 2eme mot (je sais faire)
    j'appuis sur la touche "Ajouter"
    la liste s'inscrit.

    La list sera invisible ( je sais faire)
    A la fin du questionnaire un touche "Recap"
    affichera la liste avec des fioritures en couleur .

    Le but final:
    Je pioche un mot en français
    j'écris sa traduction en polonais
    il me dit bonne ou mauvaise réponse ( Je sais faire).

    Re merci c'est très sympa de m'avoir dépanné.

  10. #10
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Salut,

    Si tu veux afficher les deux valeurs saisies (mot et valeur) pour chaque ligne de la listView, tu devrais passer par une listView personnalisée. Les grandes lignes sont celles-ci :

    - D'abord tu prépares un fichier layout qui va représenter chaque ligne de ta listView :

    item_ligne.xml :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:id="@+id/lbl_mot"
            android:text="Mot"
            android:textStyle="bold"
            android:layout_marginTop="10dp"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:id="@+id/lbl_valeur"
            android:text="Valeut"
            />
    </LinearLayout>
    - Ensuite, tu crées un adaptateur personnalisé (une classe qui étend la classe BaseAdapter) :

    ListAdapter.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
    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
    package com.christianmbangala.brigthsolution.search;
     
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
     
    import java.util.ArrayList;
     
    /**
     * Created by MasterMbg on 01/04/2016.
     */
    public class ListAdapter extends BaseAdapter {
        //Liste des paires mot-valeur
        ArrayList<Mot> list_mot;
        //Context
        Context context;
        //LayoutInflater
        LayoutInflater inflater;
     
     
        //Constructeur
        public ListAdapter(Context _context, ArrayList<Mot> _list_mot){
            this.context = _context;
            this.list_mot = _list_mot;
            inflater = LayoutInflater.from(context);
        }
     
        @Override
        public int getCount() {
            return list_mot.size();
        }
     
        @Override
        public Object getItem(int position) {
            return list_mot.get(position);
        }
     
        @Override
        public long getItemId(int position) {
            return position;
        }
     
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if(convertView == null){
                viewHolder = new ViewHolder();
                convertView = inflater.inflate(R.layout.item_ligne, parent, false);
                viewHolder.lbl_mot = (TextView)convertView.findViewById(R.id.lbl_mot);
                viewHolder.lbl_valeur = (TextView)convertView.findViewById(R.id.lbl_valeur);
     
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (ViewHolder)convertView.getTag();
            }
            viewHolder.lbl_mot.setText(list_mot.get(position).getMot());
            viewHolder.lbl_valeur.setText(list_mot.get(position).getValeur());
            return convertView;
        }
     
        public void addMot(Mot _mot){
            list_mot.add(_mot);
            this.notifyDataSetChanged();
        }
     
        class ViewHolder{
            TextView lbl_mot;
            TextView lbl_valeur;
        }
    }
    - Enfin, dans ton activity tu utilises la classe que tu as créée comme adaptateur de ta listView :

    Main22Activity.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
    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
    package com.christianmbangala.brigthsolution.search;
     
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;
     
    import java.util.ArrayList;
     
    public class Main22Activity extends AppCompatActivity {
        //Déclaration des composants graphiques
        EditText txt_mot, txt_valeur;
        Button btn_ajout;
        ListView lstv_list;
        //Adaptateur
        ListAdapter adapter;
     
        //Déclaration des variables
        String mot, valeur;
        //Liste des mots
        ArrayList<Mot> list_mots = new ArrayList<>();
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            //Inflater une et une seule fois toutes les views...
            txt_mot = (EditText)findViewById(R.id.txt_mot);
            txt_valeur = (EditText)findViewById(R.id.txt_valeur);
            btn_ajout = (Button)findViewById(R.id.btn_ajout);
            lstv_list = (ListView)findViewById(R.id.lstv_list);
     
            //Création de l'adaptateur
            adapter = new ListAdapter(Main22Activity.this, list_mots);
            //Passation de l'adaptateur à la listView
            lstv_list.setAdapter(adapter);
     
            //Gestion de clic sur le bouton
            btn_ajout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Récupérer les données saisies
                    if(txt_mot.getText().toString().equals("") || txt_valeur.getText().toString().equals("")){
                        Toast.makeText(Main22Activity.this, "Remplissez les champs de saisie svp!", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    mot = txt_mot.getText().toString();
                    valeur = txt_valeur.getText().toString();
                    //Ajouter les mots dans la liste
                    list_mots.add(new Mot(mot, valeur));
                    //Mise à jour de la listView
                    adapter.notifyDataSetChanged();
                    //Remettre le focus au premier champ
                    txt_mot.requestFocus();
                    //Réunitialisation des champs
                    txt_mot.setText("");
                    txt_valeur.setText("");
                }
            });
     
        }
    }
    Sans oublier le layout de la classe principale :

    activity_main.xml :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:orientation="vertical">
     
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Mot"
            android:id="@+id/txt_mot"/>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Valeur"
            android:id="@+id/txt_valeur"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btn_ajout"
            android:text="Ajouter"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Liste des mots : "
            android:textStyle="bold"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="10dp"/>
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/lstv_list"/>
    </LinearLayout>
    Ainsi que notre modèle :

    Mot.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
    package com.christianmbangala.brigthsolution.search;
     
    /**
     * Created by MasterMbg on 01/04/2016.
     */
    public class Mot {
        String mot, valeur;
     
        public Mot(String _mot, String _valeur){
            this.mot = _mot;
            this.valeur = _valeur;
        }
     
        public void setMot(String mot) {
            this.mot = mot;
        }
     
        public void setValeur(String valeur) {
            this.valeur = valeur;
        }
     
        public String getMot() {
            return mot;
        }
     
        public String getValeur() {
            return valeur;
        }
    }
    Ci-dessous les captures d'écran :




    Bonne programmation

    Christian Djo,
    Images attachées Images attachées   
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  11. #11
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2015
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2015
    Messages : 96
    Par défaut
    Encore merci pour tout le temps passé à m'expliquer et me montrer.
    Je vois que le listAdapter me martyrise et qu'il va continuer ...
    A +

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

Discussions similaires

  1. comment remplir une listview dynamiquement ?
    Par azert2010 dans le forum C#
    Réponses: 0
    Dernier message: 20/05/2011, 04h12
  2. Modification des paramètres du contenu d'une ListView dynamique
    Par Bisûnûrs dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 13/10/2010, 22h46
  3. Réponses: 8
    Dernier message: 11/03/2009, 18h38
  4. ListView dynamique, problème de hauteur
    Par tatayet_le_felee dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/10/2008, 10h30
  5. Remplir Listview dynamiquement?'?
    Par sabfix dans le forum C#
    Réponses: 5
    Dernier message: 04/03/2008, 10h04

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