Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Modification Police ListView

Sujet résolu
    12 juillet 2012 à 12:55:07

    Bonjour à tous,

    je rencontre un problème lorsque j'essai de modifier la police de ma listView. Pour m'expliquer voici le code:


    //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans la list (listItem) dans la vue affichageitem
    SimpleAdapter sadaptbis = new SimpleAdapter (this.getBaseContext(), listItem,R.layout.affichageitembis, new String [] {"name", "adresse", "CP", "ville", "average_price", "distance"}, new int[] {R.id.nom, R.id.adresse, R.id.CP, R.id.ville, R.id.prixMoyen, R.id.distance});
    
    
    verdana = Typeface.createFromAsset(getAssets(), "verdana.ttf");
    nom = (TextView)findViewById(R.id.nom);
    nom.setTypeface(verdana);
    	          
    //J'attribut à ma listView l'adapter que je viens de créer
    maListePerso.setAdapter(sadaptbis);
    



    Je un pointeur null à la ligne 8, ce qui est normal puisque R.id.nom fait parti du fichier XML qui décrit la liste view, alors que le fichier XML courant comporte d'autre chose dont la listView, mais c'est "affichageitembis" qui décrit la style de chaque item.

    Je voudrais donc modifier la police d'une TextView dans un item mais je n'y arrive pas et je sais pas comment faire.

    Je vous remercie
    • Partager sur Facebook
    • Partager sur Twitter
      12 juillet 2012 à 13:55:50

      Bonjour,

      Regarde ce tuto pour la personnalisation des ListView.
      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2012 à 14:49:00

        Merci pour ce lien.

        Je connais ce tuto, mais je ne trouve pas l'information qui résoudrait mon problème. Dans les items de ma listView j'arrive à disposer les élements comme je le souhaite. Ce que je n'arrive pas c'est appliquer une police que j'importe grâce à un fichier .ttf
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2012 à 15:03:28

          Bonjour,

          Crée un dossier assets au même niveau que res et mets ton fichier TTF dedans.

          Ensuite, utilise ce bout de code pour personnaliser ton TextView:
          TextView txt = (TextView) findViewById(R.id.myTextView);  
          Typeface font = Typeface.createFromAsset(getAssets(), "MyFont.ttf");  
          txt.setTypeface(font);
          
          • Partager sur Facebook
          • Partager sur Twitter
            12 juillet 2012 à 15:18:18

            Oui je sais, j'ai déjà fait ça, sa fonctionne si je modifie la police du fichier XML courant mais pas celui du fichier XML décrivant seulement les items d'une ListView
            • Partager sur Facebook
            • Partager sur Twitter
              12 juillet 2012 à 15:22:06

              Et dans la fonction getView()?

              Je pense que c'est là qu'il faut que tu mettes le bout de code.
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2012 à 15:42:02

                Et comment je l'intègre, je ne comprend pas. J'appel quand la fonction getView() après ?
                • Partager sur Facebook
                • Partager sur Twitter
                  12 juillet 2012 à 16:08:44

                  Non, getView() s'appelle toute seule dans ton Adapter à chaque création d'item.

                  Du coup, tu charges ta font dans le constructeur (histoire de ne le faire qu'une seule fois) et tu la lies à ton Textview dans getView().

                  Tu devrais également relire le tutoriel que je t'ai donné car il me semble que tu n'as pas tout compris au concept des ListView et leur personnalisation. Idem pour les Adapters.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juillet 2012 à 16:54:04

                    Je pense avoir saisi mais le problème est que je récupère les infos d'une base de données MySQL à l'aide de JSON. Si j'avais mis les données en dur dans l'application, j'aurai sur faire je pense
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 juillet 2012 à 16:58:37

                      Quand tu récupères tes données depuis ton flux JSON, tu les stockes bien dans une ArrayList, non?
                      Que la liste soit en dur ou récupérée depuis une BdD, ça ne change rien.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 juillet 2012 à 22:25:58

                        Bonsoir,

                        Comment est structuré ton application ? Peux-tu nous donner les différentes classes, fichiers XML d'affichage (présent dans le dossier layout) et leurs rôles ?

                        PS : J'ai rajouté le tag dans le titre de ton sujet afin qu'il soit conforme aux règles du forum "Mobile". Merci de faire attention à l'avenir.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                          13 juillet 2012 à 10:48:00

                          Je vous remercie de prendre part au sujet :)

                          J'obtiens un FC à cause d'un pointeur null mais je ne vois pas comment ça se fait.

                          Voici le code de mon adapter:


                          package com.restomaniak.alpha;
                          
                          import java.util.ArrayList;
                          import java.util.HashMap;
                          import java.util.List;
                          
                          import android.content.Context;
                          import android.graphics.Typeface;
                          import android.view.LayoutInflater;
                          import android.view.View;
                          import android.view.ViewGroup;
                          import android.widget.BaseAdapter;
                          import android.widget.LinearLayout;
                          import android.widget.TextView;
                          
                          public class AdapterPersoBis extends BaseAdapter {
                          	
                          	private List<String> maListe;
                          	private Context mContext;
                          	private LayoutInflater mInflater;
                          	Typeface verdana;
                          	
                          	
                          	public AdapterPersoBis (Context context, ArrayList<String> donnees)
                          	{
                          		mContext = context;
                          		maListe = donnees;
                          		mInflater = LayoutInflater.from(mContext);
                          		verdana = Typeface.createFromAsset(mContext.getAssets(), "verdana.ttf");
                          		
                          
                          	}
                          
                          	public int getCount() {
                          		return maListe.size();
                          		// TODO Auto-generated method stub
                          		
                          		
                          	}
                          
                          	public Object getItem(int position) {
                          		// TODO Auto-generated method stub
                          		
                          		return maListe.get(position);
                          	}
                          
                          	public long getItemId(int position) {
                          		// TODO Auto-generated method stub
                          		return 0;
                          	}
                          
                          	public View getView(int position, View convertView, ViewGroup parent) {
                          		// TODO Auto-generated method stub
                          		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.affichageitembis, parent, false);
                          		  } else {
                          		  	layoutItem = (LinearLayout) convertView;
                          		  }
                          		  
                          		  //(2) : Récupération des TextView de notre layout      
                          		  TextView tv_Nom = (TextView)layoutItem.findViewById(R.id.nom);
                          		  TextView tv_Adresse = (TextView)layoutItem.findViewById(R.id.adresse);
                          		  TextView tv_CP = (TextView)layoutItem.findViewById(R.id.CP);
                          		  TextView tv_Ville = (TextView)layoutItem.findViewById(R.id.ville);
                          		  TextView tv_PrixMoyen = (TextView)layoutItem.findViewById(R.id.prixMoyen);
                          		  TextView tv_Distance = (TextView)layoutItem.findViewById(R.id.distance);
                          		  TextView tv_prout = (TextView)layoutItem.findViewById(R.id.prixMoyeneuro);
                          		        
                          		  //(3) : Renseignement des valeurs       
                          		  tv_Nom.setText((CharSequence) maListe.get(position));
                          		  tv_Adresse.setText((CharSequence) maListe.get(position));
                          		  tv_CP.setText((CharSequence) maListe.get(position));
                          		  tv_Ville.setText((CharSequence) maListe.get(position));
                          		  tv_PrixMoyen.setText((CharSequence) maListe.get(position));
                          		  tv_Distance.setText((CharSequence) maListe.get(position));
                          		  tv_prout.setText((CharSequence) maListe.get(position));
                          		  
                          		  /*//(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;
                          	}
                          
                          }
                          




                          Ensuite voici comme je traite l'ArrayListe, car au final j'utilise ArrayList également et pas un JSONArray:

                          //recuperation des donnees json
                            	        try{
                            	        	JSONArray jArray = new JSONArray(result);
                            	            
                            	            for(int i=0;i<jArray.length();i++)
                            	            {
                            	            
                            	                   json_data = jArray.getJSONObject(i);
                            	                   donnees.add(json_data.getString("name"));
                            	                   donnees.add(json_data.getString("adresse"));
                            	                   donnees.add(json_data.getString("CP"));
                            	                   donnees.add(json_data.getString("ville"));
                            	                   donnees.add(json_data.getString("average_price"));
                            	                   donnees.add(json_data.getString("long"));
                            	                   donnees.add(json_data.getString("lat"));
                            	                   
                            	                   
                            	             }
                            	
                            	
                            	       }
                            		    catch(JSONException e1)
                            		    {
                            		    	Log.i("tagjsonexp",""+e1.toString());
                            		    } catch (ParseException e1) {
                            		    	
                            		     Log.i("tagjsonpars",""+e1.toString());
                            	       }
                            	        
                            	    
                                	  //Création et initialisation de l'Adapter pour les personnes
                                      AdapterPersoBis adapterProut = new AdapterPersoBis(this, donnees);
                                          
                                      //Récupération du composant ListView
                                      ListView list = (ListView)findViewById(R.id.listResto);
                                          
                                      //Initialisation de la liste avec les données
                                      list.setAdapter(adapterProut);
                          


                          J'ai un pointeur null sur:

                          list.setAdapter(adapterProut);
                          


                          Je sais pas si vous voyez une grosse erreur, mais en tout cas il y en a une malheureusement.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 juillet 2012 à 11:18:02

                            Je peux voir ton fichier XML de ton activité et la méthode onCreate de cette même activité ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                              13 juillet 2012 à 11:33:10

                              En faite c'est bon, je sais pas comment ça se fait, cette ligne avait disparu:

                              setContentView(R.layout.listeresto);
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 juillet 2012 à 11:40:49

                                Et ton problème initial est réglé par la même occasion ? Si oui, n'oublie pas de marquer le sujet en résolu.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                  13 juillet 2012 à 11:45:13

                                  Mon problème initial je sais pas encore je rencontre un autre problème, c'est que la taille de mon ArrayList données est de 14, dont 7 pour chaque item, je devrais donc avoir 2 items, mais il m'en crée 14
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 juillet 2012 à 11:49:01

                                    C'est normal, dans ton code que tu nous as montré, ta boucle rajoute chaque élément de ton JSON dans une ligne de ta liste.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                      13 juillet 2012 à 14:08:34

                                      Non c'est bon en faite.

                                      Par contre comment je peux faire pour réaliser ceci.

                                      Dans mon Array a pour taille 14 (celui que reçois l'adapter). Mais avec ça je souhaite qu'il me crée seulement 2 items et pas 14. Car les 7 premiers devant aller dans le premier item et les 7 suivants dans le deuxième. Pour résoudre ça j'ai donc fait ça:

                                      public int getCount() {
                                      		return (maListe.size())/7;
                                      		// TODO Auto-generated method stub
                                      		
                                      		
                                      	}
                                      


                                      En effet ça marche il me crée seulement 2 items. Par contre il me prend les cas 0 à 6 pour le premier item et les cases 1 à 7 pour le second, alors qu'il devrait me prendre les cases 0 à 6 pour le premier et 7 à 13 pour le deuxième.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        13 juillet 2012 à 18:40:58

                                        Ce qu'il faut faire c'est une classe conteneur qui regroupera toutes les informations de ton json pour après le mettre dans ta liste. Tu auras donc quelque chose qui ressemble à :

                                        try{
                                        	JSONArray jArray = new JSONArray(result);
                                        	for(int i=0;i<jArray.length();i++) {
                                        		jsonData = jArray.getJSONObject(i);
                                        		ClassConteneur conteneur = new ClassConteneur();
                                        		conteneur.setName(jsonData.getString("name"));
                                        		conteneur.setAdresse(jsonData.getString("adresse"));
                                        		conteneur.setCP(jsonData.getString("CP"));
                                        		// tous les autres attributs ...
                                        		
                                        		liste.add(conteneur);
                                        	}
                                        } catch(JSONException e1) {
                                        	Log.i("tagjsonexp",""+e1.toString());
                                        } catch (ParseException e1) {
                                        	Log.i("tagjsonpars",""+e1.toString());
                                        }
                                        

                                        Tu auras alors 2 objets dans ta liste. :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                          16 juillet 2012 à 22:58:14

                                          Je te remercie. Sujet clos
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          [Android] Modification Police ListView

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown