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 :

Parsing JSON disparition des ImageView lors du scrolling


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut Parsing JSON disparition des ImageView lors du scrolling
    Bonjour,

    Je parse un fichier .json et j'affiche des images qui sont dans le dossier drawable-hdpi.

    Le problème est que lorsque j'effectue du scrolling, des images supplémentaires apparaissent dans chaque ligne de la liste voir disparaissent.

    voici mon 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
     
    public class MonAdapter extends ArrayAdapter<MaClasse>{
     
    	public MonAdapter(Context context) {
    		super(context, R.layout.listrow);
     
    	}
     
    	@Override
    	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(R.layout.listrow, null);
    		}
     
    		MaClasse o = getItem(position);
    		if (o != null) {
    			TextView tt = (TextView) v.findViewById(R.id.libelle);
    			if (tt != null) {
    				tt.setText(o.getArret().getLibelle());
    			}
     
     
    			LinearLayout layout = (LinearLayout) v
    			.findViewById(R.id.mylot2);		
    			LinearLayout layout3 = (LinearLayout) v
    			.findViewById(R.id.mylot3);	
    			int count=0;
     
    			image = new ImageView(getContext());
    int resid = getContext().getResources().getIdentifier("ligne_"+o.getLigne().numLigne.toLowerCase(), "drawable","fr.monpackage");
    					image.setImageResource(resid);
     
    	layout.addView(image,new LinearLayout.LayoutParams(50, 50));
     
    		}
    		return v;
    	}
     
    }
    D'où cela pourrait venir?

    Merci.

  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
    Forcément... tu rajotues des ImageView à la main...
    Comme les views sont réutilisées (pour éviter de gaspiller du temps de traitement et de la mémoire), tu peux recevoir une view (convertView) dans laquelle tu as déjà créé l'imageview => et paf, ca en fait deux (ou trois, quatre, .... ).

    Il vaut mieux avoir l'image-view dans le layout initial et de la cacher (View.GONE) ou de la montre (View.VISIBLE) au besoin...
    Voir changer la ressource associéee par setDrawableResource (ou une fonction du genre).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    J'ai effectuer l'autre manipulation e déclarant les imageviews dans le layout même constat

  4. #4
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 274
    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 274
    Par défaut
    Tant que t’utilise addView ça te le fera.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    LinearLayout layoutItem;
    if (convertView == null) {
    	layoutItem = (LinearLayout) mInflater.inflate(R.layout.layout, parent, false);
    } else {
    	layoutItem = (LinearLayout) convertView;
    }
    ImageView iv = layoutItem.findViewById(R.id.imageView);
    Si tu fais comme ça, ça devrait fonctionner.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    je n'utilise pas d'addview, je récupère l'imageview via les ressources Id

  6. #6
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 274
    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 274
    Par défaut
    Dans ton code il y a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    layout.addView(image,new LinearLayout.LayoutParams(50, 50));
    Ah moi que tu ais changé ton code depuis.

    En attendant normalement dans ton R.layout.listrow il devrait y avoir une ImageView.
    Tu récupère comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageView iv = layoutItem.findViewById(R.id.imageView);
    Tu fais un test, si tu n'a pas d'image à afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iv.setVisibility(View.GONE);
    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iv.setVisibility(View.VISIBLE);
    Et là tu affectes une images.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/11/2013, 17h19
  2. Fixer une imageview lors du scroll
    Par dsjulien dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 12/10/2013, 16h41
  3. Réponses: 0
    Dernier message: 11/09/2012, 11h29
  4. Réponses: 6
    Dernier message: 15/06/2011, 11h52
  5. Réponses: 1
    Dernier message: 28/04/2009, 13h09

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