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 :

Limiter le nombre d'item dans une Listview


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Par défaut Limiter le nombre d'item dans une Listview
    Bonjour,

    Je cherche à limiter le nombre d'item à 10 dans une ListView. J'ai créer un adapter pour gérer l'affichage des informations de ma liste et j'aimerai limiter l'affichage de tout ce que l'activité trouve à 10 items.

    Je tente avec getcount() mais rien de probant !

    Si quelqu'un pouvez m'éclairer, merci beaucoup !

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Deux solutions :
    1. soit tu te débrouilles pour que ton tableau de données ne contiennent que 10 éléments (et dans ce cas, rien à faire au niveau adapter)
    2. soit tu empêches la construction de plus de 10 Item dans la liste, via la méthode getView() de l'adapter


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
     
               if (convertView == null && this.counter<=10) { //Conditions de création d'un item
                    convertView = mInflater.inflate(R.layout.item1, null);
                    this.counter++;
               }
     
               return convertView;
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur Informatique et Développeur Android

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Par défaut
    Bonjour ,
    nous avons la fonction getcount que retourne le nombre d'item pour une listview .
    Pour limiter le nombre à 10, il suffit d'agir sur le position dans la fonction getView
    çad SI position <10 alors {traitement de remplissage d'inflater}


    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Par défaut
    Merci pour les réponses.

    J'ai tenté d'utiliser vos réponses mais rien à faire toute la liste apparait.

    Voici le code de l'adapter en aillant ajouté vos réponses :

    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
    public View getView(int position, View convertView, ViewGroup parent) {
            View vi=convertView;
            if (convertView == null && this.counter<=10) {
            vi = inflater.inflate(R.layout.list_row, null);
            this.counter++;
     
     
     
     
            TextView title = (TextView)vi.findViewById(R.id.title);
            TextView desc = (TextView)vi.findViewById(R.id.description);
            TextView ziptown = (TextView)vi.findViewById(R.id.adresse);
            TextView dist = (TextView)vi.findViewById(R.id.cost);
            TextView tel = (TextView)vi.findViewById(R.id.numero);
            //TextView date = (TextView)vi.findViewById(R.id.date);
     
            HashMap<String, String> song = new HashMap<String, String>();
            song = data.get(position);
     
            // Setting all values in listview
            title.setText(song.get(GpsActivity.KEY_NOM));
            desc.setText(song.get(GpsActivity.KEY_ADR));
            dist.setText(song.get(GpsActivity.KEY_DIS));
            tel.setText(song.get(GpsActivity.KEY_TEL));
            ziptown.setText(song.get(GpsActivity.KEY_ZIP) + " "+song.get(GpsActivity.KEY_VILLE));
          //  date.setText(song.get(GpsActivity.KEY_DATE));
     
            }
     
            return vi;
        }
    }

    Et le code de l'activité qui fait appel à 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
    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
    for (int b = 0; b < liste.getLength(); b++) {
    			HashMap<String, String> map = new HashMap<String, String>();
    			Element e = (Element) liste.item(b);
     
     
     
    			String x = parser.getValue(e, KEY_LAT);
    			lat = Double.parseDouble(x);
    			String y = parser.getValue(e, KEY_LON);
    			lon = Double.parseDouble(y);
    			Location location2 = new Location("");
    			location2.setLatitude(lat);
    			location2.setLongitude(lon);
     
    			//on determine la distance entre le restaurant et l'utilisateur que l'on convertit en Km
    			double dist = Loading.location.distanceTo(location2);
    			double km = dist/1000;
     
     
    			DecimalFormat df = new DecimalFormat("000.00");
     
    			//on ajoute les information récupérer (adresse, distance,etc...) dans une HashList 
    			map.put(KEY_ID, parser.getValue(e, KEY_ID));
    			map.put(KEY_ADR, parser.getValue(e, KEY_ADR));
    			map.put(KEY_ZIP, parser.getValue(e, KEY_ZIP));
    			map.put(KEY_VILLE, parser.getValue(e, KEY_VILLE));
    			map.put(KEY_TEL, parser.getValue(e, KEY_TEL));
    			map.put(KEY_NOM, parser.getValue(e, KEY_NOM));
    			map.put(KEY_LON, parser.getValue(e, KEY_LON));
    			map.put(KEY_LAT, parser.getValue(e, KEY_LAT));
     
     
     
    			String dateString = parser.getValue(e, KEY_DATE);
    			SimpleDateFormat  format = new SimpleDateFormat("dd-MM-yyyy");
    			Calendar curDate = null;
    			try
    			{
    				curDate = Calendar.getInstance();
    				curDate.setTime(format.parse(dateString.replace('/','-')));
    				int year = curDate.get(Calendar.YEAR);
    				curDate.set(Calendar.YEAR, year + 2000);
    				curDate.set(Calendar.HOUR_OF_DAY, 0);
    	            curDate.set(Calendar.MINUTE, 0);
    	            curDate.set(Calendar.SECOND, 0);
    	            curDate.set(Calendar.MILLISECOND, 0);
    			}
    			catch (ParseException ee)
    			{
    				curDate = null;
    				ee.printStackTrace();
    			}
    			map.put(KEY_DATE, dateString);
    			map.put(KEY_DIS, String.valueOf(df.format(km))+" km");
     
    			// que l'on ajoute ensuite Ã* une ArrayList que l'on va pouvoir trier
     
    			System.out.println("dayDateeeeeeeeeeeeeeeeee");
    			System.out.println(DateFormat.format("yyyy-MM-dd hh:mm:ss", dayDate.getTime()));
    			System.out.println("curDateeeeeeeeeeeeeeeeee");  
    			System.out.println(DateFormat.format("yyyy-MM-dd hh:mm:ss", curDate.getTime()));
     
    			if (curDate.compareTo(dayDate) >= 0)
    			{
    				if ((usedDate == null) || (usedDate.compareTo(curDate) > 0))
    				{
    					restaulist.clear();
    					usedDate = curDate;
    				}
     
     
     
     
    				if(curDate.compareTo(usedDate) == 0)
     
     
    					restaulist.add(map);
    			}
    		}
    		Collections.sort(restaulist, new PositionComparator());
    		TextView lblDate = (TextView) findViewById(R.id.date);
    		android.text.format.DateFormat df = new android.text.format.DateFormat();
    		final String dateLongue = (String) df.format("EEEEEEEEEEEEEEEEE d MMMMMMMMMMMMMM yyyy", usedDate);
            lblDate.setText(dateLongue);
     
     
    		list=(ListView)findViewById(R.id.listviewcarte);
    		adapter=new GpsAdapter(GpsActivity.this, restaulist); 
     
    		list.setAdapter(adapter);

    L'acitivité va chercher, dans un fichier xml sur la carte SD, les données en fonction des km et de la date. Il m'affiche donc tout les km, ca j'arrive à le limiter, mais j'aimerai en plus qu'il n'affiche que 10 items de la listeview.

    Et là je cale

  5. #5
    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
    Passe lui un tableau qu'avec 10 items alors à ton adpater comme te la suggérer Hephaistos007.

    soit tu te débrouilles pour que ton tableau de données ne contiennent que 10 éléments (et dans ce cas, rien à faire au niveau adapter)
    Il n'y a aucun intérêt à passer l'ensemble de ta liste si tu ne souhaites avoir que 10 items.

    Après tu aurais pu utiliser la méthode public int getViewTypeCount (pour savoir le nombre de vue créer au lieu de passer par un counter).

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Passe lui un tableau qu'avec 10 items alors à ton adpater comme te la suggérer Hephaistos007.



    Il n'y a aucun intérêt à passer l'ensemble de ta liste si tu ne souhaites avoir que 10 items.

    Après tu aurais pu utiliser la méthode public int getViewTypeCount (pour savoir le nombre de vue créer au lieu de passer par un counter).
    J'ai tenté d'utiliser le code donné par Hephaistos007, mais j'ai toujours la liste complete. J'ai mis le code un peu plus haut.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/08/2006, 12h36
  2. [VB.NET] Suppression d'un item dans une listview
    Par Remedy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/07/2006, 16h00
  3. limite du nombre de caractères dans une requete
    Par pheno82 dans le forum Access
    Réponses: 3
    Dernier message: 01/06/2006, 22h12
  4. [C#] Suppression d'un item dans une listview
    Par Popof dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/04/2006, 13h58
  5. [C#] Limité le nombre de lignes dans une DataView ...
    Par maitrebn dans le forum Accès aux données
    Réponses: 5
    Dernier message: 07/11/2005, 23h57

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