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 :

Autocompletetextview choix dans la liste obligatoire


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Autocompletetextview choix dans la liste obligatoire
    Bonjour,

    J'ai une liste avec 1500 entrées, rechercher le bon élément avec le scrollbar c'est compliqué.

    Le widget Autocompletetextview permet de filtré cela est parfait, mais je ne veux pas que l'utilisateur puisse saisir un élément non présent dans la liste.
    De plus dans la liste il faut que pour chaque élément est associé a une clé.

    Avez vous des idées ?

    Merci d'avance

  2. #2
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Utilise la classe http://developer.android.com/referen...eTextView.html

    Après filtre le résultat sur la recherche grâce au filter. Et positionne dans ta liste ton couple texte id pour n'afficher que l'id en retour de ton adapter.

    Un exemple avec un Custom Adapter + filter

    http://stackoverflow.com/questions/8...ng-not-working

    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
    public class CustomerAdapter extends ArrayAdapter<Customer> {
        private final String MY_DEBUG_TAG = "CustomerAdapter";
        private ArrayList<Customer> items;
        private ArrayList<Customer> itemsAll;
        private ArrayList<Customer> suggestions;
        private int viewResourceId;
     
        public CustomerAdapter(Context context, int viewResourceId, ArrayList<Customer> items) {
            super(context, viewResourceId, items);
            this.items = items;
            this.itemsAll = (ArrayList<Customer>) items.clone();
            this.suggestions = new ArrayList<Customer>();
            this.viewResourceId = viewResourceId;
        }
     
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(viewResourceId, null);
            }
            Customer customer = items.get(position);
            if (customer != null) {
                TextView customerNameLabel = (TextView) v.findViewById(R.id.customerNameLabel);
                if (customerNameLabel != null) {
    //              Log.i(MY_DEBUG_TAG, "getView Customer Name:"+customer.getName());
                    customerNameLabel.setText(customer.getName());
                }
            }
            return v;
        }
     
        @Override
        public Filter getFilter() {
            return nameFilter;
        }
     
        Filter nameFilter = new Filter() {
            @Override
            public String convertResultToString(Object resultValue) {
                String str = ((Customer)(resultValue)).getName(); 
                return str;
            }
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                if(constraint != null) {
                    suggestions.clear();
                    for (Customer customer : itemsAll) {
                        if(customer.getName().toLowerCase().startsWith(constraint.toString().toLowerCase())){
                            suggestions.add(customer);
                        }
                    }
                    FilterResults filterResults = new FilterResults();
                    filterResults.values = suggestions;
                    filterResults.count = suggestions.size();
                    return filterResults;
                } else {
                    return new FilterResults();
                }
            }
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                ArrayList<Customer> filteredList = (ArrayList<Customer>) results.values;
                if(results != null && results.count > 0) {
                    clear();
                    for (Customer c : filteredList) {
                        add(c);
                    }
                    notifyDataSetChanged();
                }
            }
        };
     
    }
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Cette classe permet bien de récupérer l'id et le libellé sélectionner mais il est possible de saisir autre chose qui n'est pas présent dans la liste.
    Hors je ne veux pas que l'utilisateur ne puisse saisir autre chose que ce qui est présent dans la liste.

    Est il possible de réalisé cela ?

  4. #4
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    C'est une exemple d'architecture. Après tu en fais ce que tu veux..

    C'est pas du copier coller que je te proposé c'est juste une architecture avec l'adapter et le filter.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Je comprends que ce ne soit pas du copier coller, je demandais la faisabilité.

    J'ai trouvé la solution

    J'ai inséré un textview caché dans mon activité qui contiendra la clé de l'élément sélectionné dans l'autotextview.
    Lorsque l'utilisateur saisie dans l'autotextview, je recherche si la saisie est présent dans ma liste.
    Si c'est le cas je récupère la clé que j'insère dans mon textview sinon je vide mon textview

    Si l'utilisateur clique dans la liste on récupère la clé.

    Lors de la validation on test si le textview contient la clé et que l'autotextview contient un libellé.

    Merci encore

  6. #6
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    OK,

    En fait, je te proposait de travailler directement avec le filter qui te ressors le résultat en fonction de la recherche demandé.

    Mais je vois que tu as trouvé une solution à ton problème .

    Bonne journée
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

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

Discussions similaires

  1. [pratique][ergonomie] Pluri-choix dans une liste
    Par d_token dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 11/09/2006, 14h24
  2. Réponses: 2
    Dernier message: 01/08/2006, 23h24
  3. Réponses: 2
    Dernier message: 30/06/2006, 16h46
  4. [FORMULAIRE] affichage selon le choix dans une liste déroulante.
    Par gailup dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/06/2006, 14h58
  5. [Formulaire] filtrer liste par choix dans autre liste
    Par vatounet dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 15h57

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