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 :

SimpleCursorAdapter à SimpleAdapter


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Par défaut SimpleCursorAdapter à SimpleAdapter
    Bonjour,

    Lorsque j'utilisais un SimpleCursorAdapter j'utilisais la fonction

    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
        	adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        		public boolean setViewValue(View view, Cursor cursor, int columnIndex){
        		    if (view.getId() == R.id.OptionColor) {
     
        		        final String colorIR = cursor.getString(cursor.getColumnIndex("is_read"));
        		        final String colorIO = cursor.getString(cursor.getColumnIndex("is_ok"));
     
        		        if(colorIR.equals("null") && colorIO.equals("null"))
        		        {
        		        	((View) view.getParent()).setBackgroundColor(android.graphics.Color.WHITE);
        		        }
        		        else if(!(colorIR.equals("null")) && colorIO.equals("null"))
        		        {
        		        	((View) view.getParent()).setBackgroundColor(android.graphics.Color.parseColor("#F99DA6"));
        		        }
        		        else if(!(colorIR.equals("null")) && !(colorIO.equals("null")))
        		        {
        		        	((View) view.getParent()).setBackgroundColor(android.graphics.Color.parseColor("#A4F7A4"));
        		        }
        		       	return true;
        		    }
        		    return false;
        		}
        	});
    Qui me permettait de personnaliser chaque fond de mes objets dans la listview en fonction d'un paramètre de la table.

    Pour des besoins de personnalisation je suis repasser a un simpleAdapter, y a t-il une méthode équivalente ?

  2. #2
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 330
    Par défaut
    Personnellement avec les SimpleCursorAdapter je n'utilise ni :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bindView(View view, Context context, Cursor cursor)
    ni :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newView(Context context, Cursor cursor, ViewGroup parent)
    Je passe par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public View getView(int position, View convertView, ViewGroup parent)
    Comme avec un BaseAdapter.

    Et dedans je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Cursor cursor = getCursor();
    cursor.moveToPosition(position);
     
    LinearLayout layoutItem;
     
    if (convertView == null) {
         layoutItem = (LinearLayout) mInflater.inflate(R.layout.layout, parent, false);
    } else {
         layoutItem = (LinearLayout) convertView;
    }
    Et là t'as toutes les infos et les layout où les mettre.

  3. #3
    Membre confirmé Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Par défaut
    Oui mais maintenant j'utilise un SimpleAdapter et plus un SimpleCursorAdapter

    Comment personnaliser le fond de chaque objet de ma ListView avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList<Integer> returnedValueNumero = new ArrayList<Integer>();
    	ArrayList<String> returnedValueHD = new ArrayList<String>();
    	ArrayList<String> returnedValueVD = new ArrayList<String>();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ListSeparer adapter;
    Map<String,String> bc;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Map<String,?> createBC(int numero, String heure_depart, String ville_depart) {  
    		bc = new HashMap<String,String>();
    		bc.put("numero", String.valueOf(numero));
    		bc.put("heure_depart", heure_depart);  
    		bc.put("ville_depart", ville_depart);
    		return bc;  
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer[] valueNumero = returnedValueNumero.toArray(new Integer[returnedValueNumero.size()]);    	
            String[] valueHD = returnedValueHD.toArray(new String[returnedValueHD.size()]);
            String[] valueVD = returnedValueVD.toArray(new String[returnedValueVD.size()]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    adapter = new ListSeparer(this);
        	List<Map<String,?>> today = new LinkedList<Map<String,?>>();
     
        	i=0;
            while(i < valueNumero.length)
            {
            	if(valueDateDep[i].equals("2012-05-07"))
            	{
            		today.add(createBC(valueNumero[i], valueHD[i], valueVD[i])); 
            	}
            	i++;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adapter.addSection("Aujourd'hui", new SimpleAdapter(this, today, R.layout.recup_listinfo, 
            new String[]{"numero_bc", "heure_depart", "ville_depart"}, 
            new int[]{R.id.textNumeroBC, R.id.textHeureDepart, R.id.textVilleDepart}));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    listview.setAdapter(adapter);
        	listview.setOnItemClickListener(this);
    Comme ça j'ai une listview avec des catégories, grace a la classe ListAdapter, mais je voudrais personnaliser le fond de chaque élément de ma listeView.

    Avec le SimpleCursorAdapter j'utilisais 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
        	adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        		public boolean setViewValue(View view, Cursor cursor, int columnIndex){
        		    if (view.getId() == R.id.OptionColor) {
     
        		        final String colorIR = cursor.getString(cursor.getColumnIndex("is_read"));
        		        final String colorIO = cursor.getString(cursor.getColumnIndex("is_ok"));
     
        		        if(colorIR.equals("null") && colorIO.equals("null"))
        		        {
        		        	((View) view.getParent()).setBackgroundColor(android.graphics.Color.WHITE);
        		        }
        		        else if(!(colorIR.equals("null")) && colorIO.equals("null"))
        		        {
        		        	((View) view.getParent()).setBackgroundColor(android.graphics.Color.parseColor("#F99DA6"));
        		        }
        		        else if(!(colorIR.equals("null")) && !(colorIO.equals("null")))
        		        {
        		        	((View) view.getParent()).setBackgroundColor(android.graphics.Color.parseColor("#A4F7A4"));
        		        }
        		       	return true;
        		    }
        		    return false;
        		}
        	});
    Et pour chaque élément je pouvais personnaliser le fond mais apparemment on ne peut pas l'utiliser avec SimpleAdapter.

    Sachant que mon fichier recup_listinfo.xml est un relative layout contenant les champs numero, heure_depart, ville_depart, le fond est d'une couleur différente suivant la valeur d'un autre champs dans une autre arraylist.

  4. #4
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 330
    Par défaut
    Oui je me suis trompé je voulais dire CursorAdapter et pas SimpleCursorAdapter.

    Créer ta classe qu'extends CursorAdapter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MonAdapter extends CursorAdapter{
     
         private LayoutInflater mInflater;
     
         public MonAdapter(Context context, Cursor cursor) {
              super(context, cursor);
              mInflater = LayoutInflater.from(context); 
         }
     
         public View getView(int position, View convertView, ViewGroup parent){
              // Là j'ai déjà éxpliqué
         }
    }
    Mais bon normalement tu devrais utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public bindView(View view, Context context, Cursor cursor)
    public newView(Context context, Cursor cursor, ViewGroup parent)

  5. #5
    Membre confirmé Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Par défaut
    J'ai deja une classe qui extends de BaseAdapter :

    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
    package navibc.listseparer;
     
    import java.util.LinkedHashMap;
    import java.util.Map;
     
    import navibc.tablette.R;
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Adapter;
    import android.widget.ArrayAdapter;
    import android.widget.BaseAdapter;
     
    public class ListSeparer extends BaseAdapter {
     
     
    	public final Map<String,Adapter> sections = new LinkedHashMap<String,Adapter>();  
        public final ArrayAdapter<String> headers;  
        public final static int TYPE_SECTION_HEADER = 0;  
     
    	public ListSeparer(Context context) {
                   //pour les entetes j'utilise le fichier list_header.xml
    		headers = new ArrayAdapter<String>(context, R.layout.list_header); 
    	}
     
    	//méthode pour ajouter dans le header le nom de ma catégorie et dans sections le nom et un objet adapter
    	 public void addSection(String section, Adapter adapter) {  
    		 this.headers.add(section);  
    		 this.sections.put(section, adapter);  
          }  
    	 //Renvoi la position d'un clique
    	  public Object getItem(int position) {  
    		        for(Object section : this.sections.keySet()) {  
    		            Adapter adapter = sections.get(section);  
    		           int size = adapter.getCount() + 1;  
     
    		          // récupération de la position dans la section 
    		            if(position == 0) return section;  
    		            if(position < size) return adapter.getItem(position - 1);  
     
    		           // passe à la section suivant  
    		            position -= size;  
    	        }  
    		         return null;  
    	    }
    	  // renvoi le nombre d'item
    	   public int getCount() {  
               // 	total de l'ensemble des sections, plus une pour chaque tête de section
               int total = 0;  
               for(Adapter adapter : this.sections.values())  
                   total += adapter.getCount() + 1;  
               return total;  
           }  
     
           public int getViewTypeCount() {  
                int total = 1;  
               for(Adapter adapter : this.sections.values())  
                   total += adapter.getViewTypeCount();  
               return total;  
           }  
     
            public int getItemViewType(int position) {  
                int type = 1;  
                for(Object section : this.sections.keySet()) {  
                    Adapter adapter = sections.get(section);  
                    int size = adapter.getCount() + 1;  
     
                    // Récupération de la position dans la section
                    if(position == 0) return TYPE_SECTION_HEADER;  
                    if(position < size) return type + adapter.getItemViewType(position - 1);  
     
                    // passe a la section suivante moins un par l'entête 
                    position -= size;  
                    type += adapter.getViewTypeCount();  
                }  
                return -1;  
            }  
     
            public boolean areAllItemsSelectable() {  
                return false;  
            }  
     
            public boolean isEnabled(int position) {  
                return (getItemViewType(position) != TYPE_SECTION_HEADER);  
            } 
     
     
     
            public View getView(int position, View convertView, ViewGroup parent) {  
                int sectionnum = 0;  
                for(Object section : this.sections.keySet()) {  
                    Adapter adapter = sections.get(section);  
                    int size = adapter.getCount() + 1;  
     
                    // Récupération de la position dans la section  
                    if(position == 0) return headers.getView(sectionnum, convertView, parent);  
                    if(position < size) return adapter.getView(position - 1, convertView, parent);  
     
                    // otherwise jump into next section  
                    position -= size;  
                    sectionnum++;  
                }  
                return null;  
            }  
     
     
            public long getItemId(int position) {  
                return position;  
            }  
    }
    C'est dans la méthode getView alors, que je peux jouer sur les fonds du layout ?

  6. #6
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 330
    Par défaut
    Ouais ben suis les tuto :
    http://mickael-lt.developpez.com/tut...iser-listview/
    http://a-renouard.developpez.com/tut...iser-listview/

    Dans le constructeur de ta classe qu'extends BaseAdapter tu reçois une ArrayList.

    Avec position dans getView tu récupères super simplement l'item que tu veux :
    Les ArrayList c'est trop bien.

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

Discussions similaires

  1. ListView, SimpleAdapter, Image
    Par jbidou88 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 26/03/2013, 21h15
  2. Passage d'un SimpleAdapter à un ArrayAdapter
    Par VB 2008 dans le forum Android
    Réponses: 3
    Dernier message: 04/10/2012, 09h38
  3. SimpleAdapter; et setVisibility(View.GONE) ?
    Par amy0o0 dans le forum Composants graphiques
    Réponses: 12
    Dernier message: 15/02/2012, 15h04
  4. SimpleAdapter avec images distantes
    Par Zero dans le forum Android
    Réponses: 14
    Dernier message: 27/07/2011, 01h02
  5. Réponses: 2
    Dernier message: 21/02/2011, 17h00

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