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 :

[List et alertDialog] Simple et détails de produits


Sujet :

Android

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut [List et alertDialog] Simple et détails de produits
    Bonjour à tous,

    J'aurais un petit souci que je pense assez simple à faire, mais que je bute à réaliser.

    Actuellement j'ai un programme qui dans une de ses fonctionnalité est de rechercher des "produits" et en affiche les caractéristiques ...
    La chose est que quand je fais la recherche il m'affiche toute les caractéristiques, alors que j'aimerais que le détails du "produit" soit dans un alertDialog. Donc schématiquement voila ce que sa donne :

    Si dans le champs recherche je tape : Voiture
    il va me sortir toutes les voitures de l'inventaire en brut avec les détails dans la liste.
    Exemple : actuellement voila ce qu'il ce passe comme affichage , et quand je clique sur un items de la liste il me redonne les même informations (les informations complète donc ). Les choses en Marron sont les choses que j'aimerais enlever de la liste dite "principale"
    --------------------
    Renault - Clio
    120Ch - V6 ...
    Peinture de serie : gris , blanc ...

    --------------------
    Peugeot - 106
    115CH - V2
    Peinture de serie : ...

    --------------------
    Et moi ce que j'aimerais c'est qu'il m'affiche :
    --------------------
    Renault - Clio
    --------------------
    Peugeot - 106
    --------------------
    Et que ensuite au Clique sur l'item de la liste il m'affiche les détails.


    Si vous aviez un exemple qui fait ce genre d'opération , Merci beaucoup pour votre aide d'avance.

    Complément d'informations :
    - J'importe la base dans un premier temps en local.
    - Je passe bien par un Cursor (qui lui marche bien quand je met en commentaire des champs il ne s'affiche plus dans la liste principale, mais malheureusement ne s'affiche plus non plus dans le détails .. )


    Cordialement,

  2. #2
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Non mais il faut conserver les détails du Cursor...

    Alors, la grande question du "alertDialog"....

    Ça ne tiendrait qu'à moi, je dirai non, c'est un simple DialogFragment, qui se rajoute sur l'interface quand on clique une entrée, et en mode portrait, le fragment est toujours visible à droite de la liste...

    Ensuite, la meilleure manière de fonctionner est de créer ce qu'on appelle un POJO (un bean java, avec les données typées, et juste les fonctions set/get)... Quand on passe dans le getView... on transforme les données du Cursor dans cet objet... qu'on assigne comme "tag" à la view principale.... (setTag()).

    Lors du click, il "suffit" de récupérer le tag de la view, et on a tous les details, typés... Reste plus qu'à les passer dans le details-fragment (et s'assurer qu'il est affiché).

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Bonjour et merci pour ton début de réponse ,

    Concernant :
    Ça ne tiendrait qu'à moi, je dirai non, c'est un simple DialogFragment, qui se rajoute sur l'interface quand on clique une entrée, et en mode portrait, le fragment est toujours visible à droite de la liste...
    Si je comprend bien ce serait de faire un peu comme l'outil mail sous Android qui a une liste réduite et qui l'agrandi sur le droite au clique ? Personnellement sa m’intéresserais si tu as un tutoriel sur ça ! Mais dans mon cas je ne pense pas que ce soit le plus adapté.

    Ensuite, la meilleure manière de fonctionner est de créer ce qu'on appelle un POJO (un bean java, avec les données typées, et juste les fonctions set/get)... Quand on passe dans le getView... on transforme les données du Cursor dans cet objet... qu'on assigne comme "tag" à la view principale.... (setTag()).
    Est-ce que tu aurais à nouveau un exemple, tutoriel qui parlerais de ça ?

    Si je comprend bien je me créais dansun premier temps ma classe comportant les getter et les setter de chacun de mes champs d'informations (nom, modele etc ..)
    Ensuite je "hash" dans un chaine de string en appelant les champs voulu (dans mon exemple : Marque - Modele) que je cast dans ma listView , puis ensuite sur l'action Onclick du AlertDialog j'appel la position du cursor ? ou bien je dois créer une deuxieme "hash" de chaine de string avec toute les informations ? (du coup la j'aurais plus besoin du cursor ce qui est surprenant et là ou je pense que mon raisonnement est douteux) .

    Merci beaucoup,

  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
    Bonjour,

    Si je comprend bien je me créais dansun premier temps ma classe comportant les getter et les setter de chacun de mes champs d'informations (nom, modele etc ..)
    Ensuite je "hash" dans un chaine de string en appelant les champs voulu (dans mon exemple : Marque - Modele) que je cast dans ma listView , puis ensuite sur l'action Onclick du AlertDialog j'appel la position du cursor ? ou bien je dois créer une deuxieme "hash" de chaine de string avec toute les informations ? (du coup la j'aurais plus besoin du cursor ce qui est surprenant et là ou je pense que mon raisonnement est douteux) .
    En gros l'idée c'est de se séparer du Cursor qui contient toutes les informations en une pour pouvoir le traiter dans une classe qui te permettra d'avoir les informations disctinctes.

    Après tu peux appliquer des filtres sur ton CursorAdpater, je ne sais pas comment est ta base de données, donc peut être que cette piste ne t'aidera pas non plus.

    Ça ne tiendrait qu'à moi, je dirai non, c'est un simple DialogFragment, qui se rajoute sur l'interface quand on clique une entrée, et en mode portrait, le fragment est toujours visible à droite de la liste...
    Je rejoins l'avis de nicroman sur ce point ton alertDialog n'est pas adpaté pour ton besoin dans ce cas là. Une DialogFragment semblerait être plus correct.

    http://developer.android.com/referen...gFragment.html

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    D'accord merci pour la piste.

    Je pense passer par les Getter/setter et voir ou cela me mènera !

    Après tu peux appliquer des filtres sur ton CursorAdpater, je ne sais pas comment est ta base de données, donc peut être que cette piste ne t'aidera pas non plus.
    Ma BDD est d'un block avec 8 champs différents.


    Pour le DialogFragment il me semble qu'il n'apparait que a partir de l'API 16 , mais je me dois de le rendre accessible depuis API8 , mais ça semble être pas mal comme système. Si vous avez un liens de tutoriel que je regarde pour ma culture. Merci.

    Je vais essayer d'avancer dans ce sens.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Bonjour à tous ,

    Concernant ce 'projet' je commence a mi-mettre sérieusement ,
    Et j'aimerais des avis neuf et un regards extérieur pour essayer de résoudre ce problème.

    Donc j'aimerais avoir Une liste simplifié du genre :
    Nom - Prénom - Service
    Et que a laction sur la personne voulu il m'affiche toute les informations de la personnes du style :
    Nom - Prénom - Service - Numéro - Adresse
    Je pensais faire deux Cursor mais je ne sais pas trop comment procéder !
    Actuellement j'ai un cursor qui m'affiche toute les informations User dans la listView (ce qui sur smartphone surcharge la vue) et c'est pour sa que j'aimerais réduire les informations de la "premiere vue" et sur l'action ouvrir un Alertdialog ou bien une autre activity avec le passement de l'id-user ..

    Si vous aviez des informations / tutoriel a me fournir pour réussir sa ! Merci beaucoup pour votre aide !

    Cordialement,

    EDIT 15h39: J'ai fais donc quelques avancé , actuellement la première liste m'affiche tout les détails et ensuite au clique sur un élément de la liste il m'ouvre un alertdialog avec les meme informations puis ensuite dans le Alertdialog au clique sur "OK" il ouvre une nouvelle activity avec les détails !
    [Oui le passage par le Alertdialog ne sert a rien ... Je vais le clean]

    Donc au final sa progresse il me reste plus que a savoir réduire la 'liste1' , pour que dans l'activité 'details' je puisse avoir tout les détails.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Bonjour j'aurais besoin d'une réponse sur le point suivant , qui pourrait me faire résoudre mon problème !!

    Comment "toucher" la clé primaire sqlite ?
    sachant que quand je suis sur SQLite manager la clé primaire je ne la voie pas dans mes champs mais dans une "sous-table" matable_content : sous le nom "docid" !
    Et que dans mon code je n'est pas défini de déclaration de celle-ci ...
    Tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private static String DB_PATH = "data/data/com.dlfile/databases/";
    	private static final String DB_NAME = "matable.sqlite";
    	private static final int DB_VERSION = 1;
    	private static final String TABLE_NAME = "alpha1";
    	private static final String COLUMN_NOM = "nom";
    	private final int COLUMN_NOM_ID = 0;
    	private static final String COLUMN_NOMM = "nom_marital";
    	private final int COLUMN_NOMM_ID = 1;
    	private static final String COLUMN_PRENOM = "prenom";
    	private final int COLUMN_PRENOM_ID = 2;
    	private final String COLUMN_DATE = "date_naissance";
    	private final int COLUMN_DATE_ID = 3;
    	private final String COLUMN_NUMERO = "numero";
    	private final int COLUMN_NUMERO_ID = 4;
    donc l'idée serait que de savoir comment déclarer et toucher la clé primaire , de façon à que pour résoudre mon problème je fasse dans une deuxième activité une requête SQL ...

    Ce qui donnerais dans l'activity1 :
    ID - Nom - prenom - datenaissance
    ID - Nom - prenom - datenaissance
    ID - Nom - prenom - datenaissance

    Et sur le clique d'une des lignes ouvrirais l'activity2 avec le reste des informations , passer dans un Intent le "ID" (correspondant à la primary key).

    et dans l'activity2 faire une requête SQL qui ira chercher et afficher les données WHERE ID = "ID" ...

    Si l'idée semble correct merci de me le dire (ou si elle ne l'ai pas) , et si vous aviez de quoi me débloquer ce serais gentil ! Merci

    EDIT 16h50 : A noter que actuellement je fais passer le myIntent.putExtra("state",l.getSelectedItemId());
    Mais que le resultat est un nombre absolument "énorme" mais pourrait bien être le bon numéro je ne sais pas comment savoir .. :S ! a 19 chiffres du genre : -921545612315646313

    EDIT 16h54 : Quand je fais un SELECT docid FROM alpha1 dans le SQLite Manager , il m'affiche bien le numéro des 37262 enregistrements ... Mais comment exploiter ce numéro dans ma programmation s'il vous plait ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Bonjour,
    J'ai rajouté le champs "docid" dans mes déclaration(voir CODE1) et dans mon curseur ce qui m'affiche complètement les données voulu à savoir toutes (voir CODE2):
    Mais personne ne sais comment je pourrais faire pour avoir dans la première listview Nom - Prenom - Date
    Et dans le passage d'activity avoir toute les informations qui s'affiche ?


    Ou sinon : Pouvoir exploité le "DOCID" le faire passer à l'activity2 avec un intent et de l'autre coté faire une requête sql where DOCID = "docid" ?!!



    Merci pour vos réponses futur j'espère ... à croire que toutes les personnes sur ce forum sont la pour demander et peut pour y répondre :Z sa deviens moins "forum des professionnels"

    CODE1 :
    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
    	private static String DB_PATH = "data/data/com.programme/databases/";
    	private static final String DB_NAME = "matable.sqlite";
    	private static final int DB_VERSION = 1;
    	private static final String TABLE_NAME = "alpha1";
    	private static final String COLUMN_NOM = "nom";
    	private final int COLUMN_NOM_ID = 0;
    	private static final String COLUMN_NOMM = "nom_marital";
    	private final int COLUMN_NOMM_ID = 1;
    	private static final String COLUMN_PRENOM = "prenom";
    	private final int COLUMN_PRENOM_ID = 2;
    	private final String COLUMN_DATE = "date_naissance";
    	private final int COLUMN_DATE_ID = 3;
    	private final String COLUMN_NUMERO = "numero";
    	private final int COLUMN_NUMERO_ID = 4;
    	private final String COLUMN_ADRESSE = "adresse";
    	private final int COLUMN_ADRESSE_ID = 5;
    	private final String COLUMN_CODEEL = "code";
    	private final int COLUMN_CODEEL_ID = 6;
    	private final String COLUMN_BUREAU = "bureau";
    	private final int COLUMN_BUREAU_ID = 7;
    	private final String COLUMN_DOCID = "docid";
    	private final int COLUMN_DOCID_ID = 8 ;
    CODE2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String text = cursor.getString(COLUMN_NOMM_ID) + " "
    + cursor.getString(COLUMN_PRENOM_ID)
    + "\n Nom de naissance: "
    + cursor.getString(COLUMN_NOM_ID)
    + "\n Date de naissance: "
    + cursor.getString(COLUMN_DATE_ID) + "\n Adresse: "
    + cursor.getString(COLUMN_NUMERO_ID) + " "
    + cursor.getString(COLUMN_ADRESSE_ID)
    + "\n N°: "
    + cursor.getString(COLUMN_CODEEL_ID) + "\n Bureau: "
    + cursor.getString(COLUMN_BUREAU_ID) + "\n Numéro d'inscrit: "
    + cursor.getString(COLUMN_DOCID_ID);

  9. #9
    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
    Moi perso je suis complétement perdu.

    Déjà
    Comment "toucher" la clé primaire sqlite ?
    Cela il faut le faire si possible jamais.
    Laisse tranquille ta clé primaire elle t'a rien fait .
    Bouger les clés primaire manuellement d'une BD peut entraîner des risques de pertes de lien entre tables si ce changement est mal fait.

    Après qu'est ce que tu veux faire réellement et qu'es ce que tu entends par "sous-table" ?

    Mais personne ne sais comment je pourrais faire pour avoir dans la
    première listview Nom - Prenom - Date
    Créer ton adpater personnalisé et filtre depuis la getView de celui ci les données utiles et non utiles.

    Et sur le clique d'une des lignes ouvrirais l'activity2 avec le reste des informations , passer dans un Intent le "ID" (correspondant à la primary key).
    dans ce cas pourquoi tu ne passes pas ton objet ?
    Tu aurais toutes les informations de l'élément ainsi que son ID, si tu veux aller modifier cet élément (nom,prénom,..).

    EDIT 16h50 : A noter que actuellement je fais passer le myIntent.putExtra("state",l.getSelectedItemId());
    Mais que le resultat est un nombre absolument "énorme" mais pourrait bien être le bon numéro je ne sais pas comment savoir .. :S ! a 19 chiffres du genre : -921545612315646313
    C'est là ou je suis perdu.

    L'id de ta liste n'est pas l'ID de ta BD !

    Quand je fais un SELECT docid FROM alpha1 dans le SQLite Manager , il m'affiche bien le numéro des 37262 enregistrements ... Mais comment exploiter ce numéro dans ma programmation s'il vous plait ?
    Il te suffit alors de mettre dans ta liste les éléments récupéré du cursor.
    De filtrer après dans le GetView de ton adapter les éléménets à affichér
    Après lors de la récupération de la view sélectionne, récupérer l'élément entier qu'il y a derrière (et non les info filtrés)

    De cet éléments récupérer tu auras alors toutes les info se trouvant dans la BD,donc c'est bien cet éléments si j'ai bien compris que tu dois passer a l'activity 2.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Cela il faut le faire si possible jamais.
    Laisse tranquille ta clé primaire elle t'a rien fait .
    Donc ... pour la clé primaire au final non je la touche pas (j'ai essayer mais vue le nombre,cela ma perturbé, et non je ne comptais pas le modifier mais m'en servir de marqueur pour reprendre mon enregistrement)

    C'est là ou je suis perdu.

    L'id de ta liste n'est pas l'ID de ta BD !
    Oui puisque je travail sur une VirtualTable. J'ai des tables alpha_content alpha_segdir et alpha_segments , en plus de ma table 'alpha' qui elle contient mes données principales et brut. et dans la table alpha_content il y a un champs : docid qui est de type je pense autoincrement et qu'y reprend le bon nombre de lignes qu'il y a dans la table principal. (c'est elles que j'appels les "sous-table")
    Créer ton adpater personnalisé et filtre depuis la getView de celui ci les données utiles et non utiles.
    J'ai bien mon getView mais qui me renvoi tout mon cursor , mais si je filtre au niveau du cursor je ne sais pas comment récupérer les données au niveau de l'activity2 ! (Je vais faire un schéma en fin pour expliquer je pense^^)
    Il te suffit alors de mettre dans ta liste les éléments récupéré du cursor.
    De filtrer après dans le GetView de ton adapter les éléménets à affichér
    Après lors de la récupération de la view sélectionne, récupérer l'élément entier qu'il y a derrière (et non les info filtrés)
    Alors la je crois que tu es sur ce qu'il me faudrait , tu aurais un tuto, ou une choses qui montre le rendu de sa ?


    Donc j'ai 3 Class :
    Main : qui affiche un formulaire de recherche par nom - prenom et qui dispose d'une listView juste en dessous du formulaire qui se rempli quand on clique sur "recherche" et que les champs son rempli. Et le getView en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		public View getView(int position, View convertView, ViewGroup parent) {
    			final View view;
    			if (convertView == null) {
    				view = layoutInflater.inflate(
    						android.R.layout.simple_list_item_1, null);
    			} else {
    				view = convertView;
    			}
    			TextView textView = (TextView) view
    					.findViewById(android.R.id.text1);
    			textView.setText((String) getItem(position));
    			return view;
    		}
    Records : qui est mon dbhelper qui me permet d'ouvrir , selectionner etc sur la bdd .. et ou je fait mon cursor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String text = cursor.getString(COLUMN_NOMM_ID) + " "
    + cursor.getString(COLUMN_PRENOM_ID)
    + "\n Nom de naissance: "
    + cursor.getString(COLUMN_NOM_ID)
    + "\n Date de naissance: "
    + cursor.getString(COLUMN_DATE_ID) + "\n Adresse: "
    + cursor.getString(COLUMN_NUMERO_ID) + " "
    + cursor.getString(COLUMN_ADRESSE_ID)
    + "\n N°: "
    + cursor.getString(COLUMN_CODEEL_ID) + "\n Bureau: "
    + cursor.getString(COLUMN_BUREAU_ID) + "\n Numéro d'inscrit: "
    + cursor.getString(COLUMN_DOCID_ID);
    Et ma troisième activity (Test.java pour l'instant) toute simple qui m'affiche dans une textView les choses passé en Intent.

    J'ai une bdd avec des informations du genre : Nom / prenom / datenaissance / Code / adresse ..
    Donc j'aimerais que quand je suis sur "main" et que je fais une recherche sur DUPONT marc , qu'il m'affiche tout les DUPONT marc dans ma listView avec seulement les informations type :
    DUPONT marc - 02/02/1999
    DUPONT marc - 05/06/1996
    etc
    Et que a l'appuie sur l'un des éléments il m'ouvre dans l'activity2 , la totalité des informations de la personnes du genre :
    DUPONT marc - 05/02/1999
    adresse : general de gaulle
    numero : 0775497653
    etc .


    Sur la théorie sa parais très simple mais la mise en place .. je suis pas loin de la pendaison par RJ45 dans le bureau --' !

    Cordialement,

  11. #11
    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
    tu aurais un tuto, ou une choses qui montre le rendu de sa ?
    Il te suffit alors de mettre dans ta liste les éléments récupéré du cursor.
    C'est un début :
    http://mickael-lt.developpez.com/tut...iser-listview/
    Tu peux te baser sur la classe ArrayAdapter.

    De filtrer après dans le GetView de ton adapter les éléménets à affichér
    Là dessus comme je le précise dans ta fonction getView reprends l'exemple ci dessus pour afficher ce que tu souhaite afficher.
    N'oublie pas que ta liste de ton adpater devra contenir toutes les infos d'un élément.

    Après lors de la récupération de la view sélectionne, récupérer l'élément entier qu'il y a derrière (et non les info filtrés)
    De même ce tutoriel est un bon début pour gérer , soit tu passe par la fonction de la listView, tu récupère la position de l'élément sélectionné, puis tu en déduis l'élément de la liste sélectionné via ton Adapter GetItem(position).
    De là tu récupères les infos de ton élément.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    J'ai déjà essayé et bien vue ce tutoriel ..
    Par contre j'ai l'impression que la logique que j'ai employé est totalement contraire à celui du tutoriel proposé .. :S

    Voila mon code : 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
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    public class DlfileActivity extends ListActivity {
    	private final List<String> searchResults = new ArrayList<String>();
    	private Records records;
    	private LayoutInflater layoutInflater;
    	private static final String TAG = "Saintmalo-Main : ";
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		records = new Records(this);
     
    		try {
    			records.openDatabase();
    		} catch (SQLException e) {
    			try {
    				records.createDataBase();
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}
    			Log.e(TAG, "unable to create db");
    		}
     
    		layoutInflater = LayoutInflater.from(this);
    		final StringListAdapter adapter = new StringListAdapter(searchResults);
    		getListView().setAdapter(adapter);
     
    		final EditText text = (EditText) findViewById(R.id.txt);
    		final EditText prenom = (EditText) findViewById(R.id.personne);
    		// Recherche
    		Button search = (Button) findViewById(R.id.search);
    		search.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				searchResults.clear();
    				searchResults.addAll(records.search(text.getText().toString(),
    						prenom.getText().toString()));
    				adapter.notifyDataSetChanged();
    			}
    		});
    		// Nouvelle recherche
    		Button add = (Button) findViewById(R.id.add);
    		add.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				Intent intent = new Intent(getApplicationContext(),
    						DlfileActivity.class);
    				startActivity(intent);
    				finish();
    			}
    		});
    		// Quitter l'application
    		Button quit = (Button) findViewById(R.id.quit);
    		quit.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				finish();
    			}
    		});
     
    	}
     
    	protected void onListItemClick(final ListView l, View v, final int position, long id) {
    		super.onListItemClick(l, v, position, id);
     
    		AlertDialog.Builder adb = new AlertDialog.Builder(DlfileActivity.this);
    		adb.setTitle("Information sur l'électeur");
    		adb.setMessage("Voir toutes les informations sur ce électeur ?");
    		adb.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
     
    				Intent myIntent = new Intent(getBaseContext(), Test.class);
    				myIntent.putExtra("state",l.getItemAtPosition(position).toString());
    			}
    		});
    		adb.setIcon(R.drawable.info);
    		adb.show();
    	}
     
    	private class StringListAdapter extends BaseAdapter {
    		private final List<String> stringList;
     
    		public StringListAdapter(List<String> stringList) {
    			this.stringList = stringList;
    		}
     
    		public int getCount() {
    			return stringList.size();
    		}
     
    		public Object getItem(int position) {
    			return stringList.get(position);
    		}
     
    		public long getItemId(int position) {
    			return position;
    		}
     
    		public View getView(int position, View convertView, ViewGroup parent) {
    			final View view;
     
    			if (convertView == null){
    				view = layoutInflater.inflate(
    					android.R.layout.simple_list_item_1,null);
     
    			}else {
    				view = convertView;
    			}
    			TextView textView = (TextView) view
    					.findViewById(android.R.id.text1);
    			textView.setText((String)getItem(position));
    			return view;
    		}
    	}
    }
    Mon Code : Records (dbhelper)
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    public class Records extends SQLiteOpenHelper implements BaseColumns {
     
    	private Context myContext;
    	private SQLiteDatabase myDataBase;
    	private static final String TAG = "Records";
     
    	private static String DB_PATH = "data/data/com.dlfile/databases/";
    	private static final String DB_NAME = "electeur5.sqlite";
    	private static final int DB_VERSION = 1;
    	private static final String TABLE_NAME = "alpha1";
    	private static final String COLUMN_NOM = "nom";
    	private final int COLUMN_NOM_ID = 0;
    	private static final String COLUMN_NOMM = "nom_marital";
    	private final int COLUMN_NOMM_ID = 1;
    	private static final String COLUMN_PRENOM = "prenom";
    	private final int COLUMN_PRENOM_ID = 2;
    	private final String COLUMN_DATE = "date_naissance";
    	private final int COLUMN_DATE_ID = 3;
    	private final String COLUMN_NUMERO = "numero";
    	private final int COLUMN_NUMERO_ID = 4;
    	private final String COLUMN_ADRESSE = "adresse";
    	private final int COLUMN_ADRESSE_ID = 5;
    	private final String COLUMN_CODEEL = "code_electeur";
    	private final int COLUMN_CODEEL_ID = 6;
    	private final String COLUMN_BUREAU = "bureau";
    	private final int COLUMN_BUREAU_ID = 7;
    	private final String COLUMN_DOCID = "docid";
    	private final int COLUMN_DOCID_ID = 8 ;
     
    	public void openDatabase() throws SQLException {
    		Log.e(TAG, "openDatabase called");
    		String path = DB_PATH + DB_NAME;
    		myDataBase = SQLiteDatabase.openDatabase(path, null,
    				SQLiteDatabase.NO_LOCALIZED_COLLATORS
    						| SQLiteDatabase.OPEN_READONLY);
    	}
     
    	@Override
    	public synchronized void close() {
    		if (myDataBase != null)
    			myDataBase.close();
    		super.close();
    	}
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    	}
     
    	public void insert(String text) {
    		SQLiteDatabase db = getWritableDatabase();
    		ContentValues values = new ContentValues();
    		values.put(COLUMN_NOM, text);
    		db.insert(TABLE_NAME, COLUMN_NOM, values);
    	}
     
    	public List<String> search(String query, String rechPrenom) {
    		List<String> result = new ArrayList<String>();
    		SQLiteDatabase db = getReadableDatabase();
    		final Cursor cursor = db.query(TABLE_NAME, new String[] { COLUMN_NOM,
    				COLUMN_NOMM, COLUMN_PRENOM, COLUMN_DATE, COLUMN_NUMERO,
    				COLUMN_ADRESSE, COLUMN_CODEEL, COLUMN_BUREAU,COLUMN_DOCID }, (COLUMN_NOMM
    				+ " LIKE ? AND " + COLUMN_PRENOM + " LIKE ? "), new String[] {
    				query, rechPrenom + "%" }, null, null, null);
    		// + " OR " +(COLUMN_NOMM +" LIKE ? AND " + COLUMN_PRENOM + " LIKE ? ")
    		// " OR "+ COLUMN_NOM +
     
    		if (cursor.moveToFirst()) {
    			do {
    				String text = cursor.getString(COLUMN_NOMM_ID) + " "
    						+ cursor.getString(COLUMN_PRENOM_ID)
    						+ "\n Nom de naissance: "
    						+ cursor.getString(COLUMN_NOM_ID)
    						+ "\n Date de naissance: "
    						+ cursor.getString(COLUMN_DATE_ID) + "\n Adresse: "
    						+ cursor.getString(COLUMN_NUMERO_ID) + " "
    						+ cursor.getString(COLUMN_ADRESSE_ID)
    						+ "\n N° Electeur: "
    						+ cursor.getString(COLUMN_CODEEL_ID) + "\n Bureau: "
    						+ cursor.getString(COLUMN_BUREAU_ID) + "\n Numéro d'inscrit: "
    						+ cursor.getString(COLUMN_DOCID_ID);
     
    				result.add(text);
    			} while (cursor.moveToNext());
    		}
    		cursor.close();
    		return result;
    	}
     
    }
    Et mon code "TEST" qui est l'activité ouverte au click sur un item de la liste :
    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
     
    public class Test extends Activity{
     
    	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details);
    		 //On récupère l’Intent que l’on a reçu
    		 Intent thisIntent = getIntent();
    		 //On récupère l'extra grâce à leurs id
    		 String nom = thisIntent.getExtras().getString("state");
     
     
    		 //On récupère les champs et on leur affecte le texte
    		 TextView loginText = (TextView) findViewById(R.id.nom);
    		 loginText.setText(nom);
    		}
    }
    Je comprend pas bien ou je pourrais faire le filtrage etc ... !
    Je suis totalement perdu sur le coup la ..

  13. #13
    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
    Par contre j'ai l'impression que la logique que j'ai employé est totalement contraire à celui du tutoriel proposé .. :S
    Oui c'est cela.

    Il faut que tu abandonnes l'idée des Adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final StringListAdapter adapter
    Et que tu partes plus vars un Adpater personnalisé Comme dans le tutoriel proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class PersonneAdapter extends BaseAdapter {
    Tu peux aussi te baser sur la classe ArrayAdpater.

    De là tu prends exemple sur le tutoriel et tu te crées une liste dans ce nouvel adapter ou tu utilises la liste de l'ArrayAdapter à partir de ton cursor.


    Après pour filtre ce que tu as à afficher tu mais tes filtres depuis la fonction getView de cet Adapter


    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
    public View getView(int position, View convertView, ViewGroup parent) {
      LinearLayout layoutItem;
      //(1) : Réutilisation des layouts
      if (convertView == null) {
      	//Initialisation de notre item à partir du  layout XML "personne_layout.xml"
        layoutItem = (LinearLayout) mInflater.inflate(R.layout.personne_layout, parent, false);
      } else {
      	layoutItem = (LinearLayout) convertView;
      }
     
      //(2) : Récupération des TextView de notre layout      
      TextView tv_Nom = (TextView)layoutItem.findViewById(R.id.TV_Nom);
      TextView tv_Prenom = (TextView)layoutItem.findViewById(R.id.TV_Prenom);
     
      //(3) : Renseignement des valeurs       
      tv_Nom.setText(mListP.get(position).nom);
      tv_Prenom.setText(mListP.get(position).prenom);
     
      //(4) Changement de la couleur du fond de notre item
      if (mListP.get(position).genre == Personne.MASCULIN) {
        layoutItem.setBackgroundColor(Color.BLUE);
      } else {
      	layoutItem.setBackgroundColor(Color.MAGENTA);
      }
     
      //On retourne l'item créé.
      return layoutItem;
    En fonction du xml que tu auras déclaré tu le rempliras avec les éléments de ta liste.

    Pour récupérer l'élément complet de ta liste il te suffit d'appeller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Object getItem(int position) {
      return mListP.get(position);
    }
    Donc retiens bien la liste que tu as dans l'adapter doit contenir toutes les information d'un éléments.
    Par contre lors de l'affichage de la View il te suffit de remplir des Itemsque tu veux afficher

    Dans l'exemple du tuto si l'adresse était contenu dans la liste elle ne serait pas pour autant afficher mais bien contenu dans l'élément de la liste.

Discussions similaires

  1. Boucler les elements d'une liste de facon simple
    Par fennec62 dans le forum Général Python
    Réponses: 3
    Dernier message: 17/08/2014, 10h26
  2. Réponses: 4
    Dernier message: 26/03/2009, 14h58
  3. Liste chaînée , exercice simple et perte d'élément
    Par Alternative451 dans le forum C
    Réponses: 1
    Dernier message: 21/04/2008, 15h07
  4. [FreePascal] Problème pour une simple liste chaînée
    Par piff62 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 26/11/2005, 19h25
  5. [INFO] Liste des produits Oracle
    Par orafrance dans le forum SQL
    Réponses: 2
    Dernier message: 01/08/2005, 21h42

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