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 :

load img web --> custom adapter --> listview


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Par défaut load img web --> custom adapter --> listview
    Hi,

    Voilà je voudrais pouvoir mettre une image, avec du texte pour chaque item dans une listview.

    Je fais cela actuellement avec un SimpleAdapter qui récupère une image dasn le dossier drawable. Maintenant j'aimerais pouvoir faire pareil mais avec une image venant de internet.

    J'ai le code pour downloader l'image mais après je ne sais pas comment la définir dans ma listview.

    voilà mon code:

    • charger l'image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ImageView bmImage = (ImageView)findViewById(R.id.img);
    		BitmapFactory.Options bmOptions;
    		bmOptions = new BitmapFactory.Options();
    		bmOptions.inSampleSize = 1;
    		Bitmap bm = LoadImage("http://4.bp.blogspot.com/_C5a2qH8Y_jk/StYXDpZ9-WI/AAAAAAAAAJQ/sCgPx6jfWPU/S1600-R/android.png",bmOptions);
    		bmImage.setImageBitmap(bm);
    • mon code pour le reste:

    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    package Tarabbia.Xamax;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.HashMap;
     
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
     
    public class calendrier extends Activity implements OnClickListener {
    	//Variables Globales
    	private ListView maListViewPerso;
    	JSONObject json_data;//objet qui récupère les partie de la requête sur le webService PHP
    	EditText tbValue = null;
    	//On déclare la HashMap qui contiendra les informations pour un item
    	public HashMap<String, String> map;
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.calendrier);
    		//affichage du popup
    		Toast.makeText(this,"Le calendrier de Xamax",Toast.LENGTH_LONG).show();
     
    		//Récupération de la listview créée dans le fichier joueurs.xml
    		maListViewPerso = (ListView) findViewById(R.id.listviewcalendrier);
     
    		//Récupération du button
    		Button btnRechercher = (Button)findViewById(R.id.btnAnnee);
     
    		//Récupération du textBox, activation de l'evenement CLICK
    		tbValue = (EditText)this.findViewById(R.id.editTextAnnee);
    		btnRechercher.setOnClickListener(this);
    	}
     
    	@Override
    	protected void onDestroy() {
    		Log.i("","OnDestroy");
    		finish();
    		super.onDestroy();
    	}
     
    	@Override
    	public void onClick(View v) {
    		switch (v.getId()){
    		case R.id.btnAnnee:
    			if (tbValue.getText().toString().equals("") ) {
    				Toast.makeText(this, "Veuillez saisir une date dans la \"texte box\" au-dessus", Toast.LENGTH_SHORT).show();
    			}else{
     
    				if(Xamax_infos.listItemCalendrier.size()>0){
    					Xamax_infos.listItemCalendrier.clear();
    				}
    				afficheCalendrier(tbValue.getText().toString());
    			}
    			break;
    		}	
    	}	
    	public void afficheCalendrier (String var){
    		try{	
    			//mise en place de l'URL du webservice ansi que la requête SQL
    			JSONArray jArray = new JSONArray(MySqlConnector.getData("http://jonathantarabbia.cwebh.org/xamax_mobile/select.php","calendrier",var));
     
    			for(int i=0;i<jArray.length();i++){
    				json_data = jArray.getJSONObject(i);
    				map = new HashMap<String, String>();
    				//on insère un élément titre que l'on récupérera dans le textView titre créé dans le fichier affichageitem.xml
    				map.put("titre", ""+ json_data.get("Domicile")+ " VS "+ json_data.get("Visiteur"));
    				//on insère un élément description que l'on récupérera dans le textView description créé dans le fichier affichageitem.xml
    				map.put("description", "" + json_data.get("dateMatch") );
    				//on insère la référence à l'image (convertit en String car normalement c'est un int) que l'on récupérera dans l'imageView créé dans le fichier affichageitem.xml
    				map.put("img", String.valueOf(R.drawable.icon));
    				//enfin on ajoute cette hashMap dans la arrayList
    				Xamax_infos.listItemCalendrier.add(map);
    			} 
    			afficheResultat();
     
    		}catch(JSONException e){
    			Log.e("log_tag", "Erreur de conversion des données "+e.toString());
    		}	
     
    		//Enfin on met un écouteur d'évènement sur notre listView
    		maListViewPerso.setOnItemClickListener(new OnItemClickListener() {
    			@SuppressWarnings("unchecked")
    			public void onItemClick(AdapterView<?> a, View v, int position, long id) {
     
    				//on récupère la HashMap contenant les infos de notre item (titre, description, img)
    				HashMap<String, String> map = (HashMap<String, String>) maListViewPerso.getItemAtPosition(position);
     
    				//on créer une boite de dialogue
    				AlertDialog.Builder adb = new AlertDialog.Builder(calendrier.this);
     
    				//on attribut un titre à notre boite de dialogue
    				adb.setTitle("Xamaxien");
     
    				//on insère un message à notre boite de dialogue, et ici on affiche le titre de l'item cliqué
    				adb.setMessage("Votre choix : "+map.get("titre"));
     
    				//on indique que l'on veut le bouton ok à notre boite de dialogue
    				adb.setPositiveButton("Ok", null);
     
    				//on affiche la boite de dialogue
    				adb.show();
    			}
    		});
    	}
     
    	private InputStream OpenHttpConnection(String strURL) throws IOException{
    		 InputStream inputStream = null;
    		 URL url = new URL(strURL);
    		 URLConnection conn = url.openConnection();
     
    		 try{
    		  HttpURLConnection httpConn = (HttpURLConnection)conn;
    		  httpConn.setRequestMethod("GET");
    		  httpConn.connect();
     
    		  if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    		   inputStream = httpConn.getInputStream();
    		  }
    		 }
    		 catch (Exception ex)
    		 {
    		 }
    		 return inputStream;
    		}
     
    	private Bitmap LoadImage(String URL, BitmapFactory.Options options)
    	   {       
    	    Bitmap bitmap = null;
    	    InputStream in = null;       
    	       try {
    	           in = OpenHttpConnection(URL);
    	           bitmap = BitmapFactory.decodeStream(in, null, options);
    	           in.close();
    	       } catch (IOException e1) {
    	       }
    	       return bitmap;               
    	   }
     
    	private void afficheResultat(){
     
    		//Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue affichageitem
    		SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), Xamax_infos.listItemCalendrier, R.layout.affichageitem,
    				new String[] {"img", "titre", "description"}, new int[] {R.id.img, R.id.titre, R.id.description});
     
    		//On attribut à notre listView l'adapter que l'on vient de créer
    		maListViewPerso.setAdapter(mSchedule);
    	}
    }
    Merci D'avance,

    John

  2. #2
    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
    Bonjour,

    tu as un tutoriel qui se rapprocherait de ta demande . Ce tutoriel porte sur une gallery mais tu peux t'inspirer de l'adapter crée sur un BaseAdapter ainsi que sur la récupération des images. Après si tu veux rester sur un simple adapter tu peux également .

    http://mickael-lt.developpez.com/tut...rie-connectee/

  3. #3
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,

    tu as un tutoriel qui se rapprocherait de ta demande . Ce tutoriel porte sur une gallery mais tu peux t'inspirer de l'adapter crée sur un BaseAdapter ainsi que sur la récupération des images. Après si tu veux rester sur un simple adapter tu peux également .

    http://mickael-lt.developpez.com/tut...rie-connectee/
    Bonjour,

    J'ai crée une activity avec une listview parser apartir d'un fichier xml
    J'ai n'réussi pas à faire en sorte d'ouvrir une nouvelle activity lorsqu'on clique sur un item

    code :

    Main.java
    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
    package com.pxr.tutorial.xmltest;
     
    import java.util.ArrayList;
    import java.util.HashMap;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
     
     
     
    import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class Main extends ListActivity {
        /** Called when the activity is first created. */
    	public static final int CODE_RETOUR = 0;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.listplaceholder);
     
            ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
     
     
            String xml = XMLfunctions.getXML();
            Document doc = XMLfunctions.XMLfromString(xml);
     
            int numResults = XMLfunctions.numResults(doc);
     
            if((numResults <= 0)){
            	Toast.makeText(Main.this, "Geen resultaten gevonden", Toast.LENGTH_LONG).show();  
            	finish();
            }
     
    		NodeList nodes = doc.getElementsByTagName("result");
     
    		for (int i = 0; i < nodes.getLength(); i++) {							
    			HashMap<String, String> map = new HashMap<String, String>();	
     
    			Element e = (Element)nodes.item(i);
    			map.put("zone", XMLfunctions.getValue(e, "zone"));
            	map.put("name", "Zone:" + XMLfunctions.getValue(e, "name"));
            	//map.put("Score", "Score: " + XMLfunctions.getValue(e, "score"));
            	mylist.add(map);			
    		}		
     
            ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
                            new String[] { "name", "Score" }, 
                            new int[] { R.id.item_title, R.id.item_subtitle });
     
            setListAdapter(adapter);
     
            final ListView lv = getListView();
            lv.setTextFilterEnabled(true);
     
            lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    // When clicked, show a toast with the TextView text
     
     
     
              	  //When clicked evrywhere, open prologue.java
              	    Intent i = new Intent (getApplicationContext(), Resto.class);
          	        startActivity(i);
              }
            });
        } 
    }
    XMLfunctions.java

    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
    111
    112
    113
    114
    package com.pxr.tutorial.xmltest;
     
    import java.io.IOException;
    import java.io.StringReader;
    import java.io.UnsupportedEncodingException;
    import java.net.MalformedURLException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
     
     
    public class XMLfunctions {
     
    	public final static Document XMLfromString(String xml){
     
    		Document doc = null;
     
    		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            try {
     
    			DocumentBuilder db = dbf.newDocumentBuilder();
     
    			InputSource is = new InputSource();
    	        is.setCharacterStream(new StringReader(xml));
    	        doc = db.parse(is); 
     
    		} catch (ParserConfigurationException e) {
    			System.out.println("XML parse error: " + e.getMessage());
    			return null;
    		} catch (SAXException e) {
    			System.out.println("Wrong XML file structure: " + e.getMessage());
                return null;
    		} catch (IOException e) {
    			System.out.println("I/O exeption: " + e.getMessage());
    			return null;
    		}
     
            return doc;
     
    	}
     
    	/** Returns element value
              * @param elem element (it is XML tag)
              * @return Element value otherwise empty String
              */
    	 public final static String getElementValue( Node elem ) {
    	     Node kid;
    	     if( elem != null){
    	         if (elem.hasChildNodes()){
    	             for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() ){
    	                 if( kid.getNodeType() == Node.TEXT_NODE  ){
    	                     return kid.getNodeValue();
    	                 }
    	             }
    	         }
    	     }
    	     return "";
    	 }
     
    	 public static String getXML(){	 
    			String line = null;
     
    			try {
     
    				DefaultHttpClient httpClient = new DefaultHttpClient();
    				HttpPost httpPost = new HttpPost("http://monresto.net/android/test.xml");
     
    				HttpResponse httpResponse = httpClient.execute(httpPost);
    				HttpEntity httpEntity = httpResponse.getEntity();
    				line = EntityUtils.toString(httpEntity);
     
    			} catch (UnsupportedEncodingException e) {
    				line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
    			} catch (MalformedURLException e) {
    				line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
    			} catch (IOException e) {
    				line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
    			}
     
    			return line;
     
    	}
     
    	public static int numResults(Document doc){		
    		Node results = doc.getDocumentElement();
    		int res = -1;
     
    		try{
    			res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
    		}catch(Exception e ){
    			res = -1;
    		}
     
    		return res;
    	}
     
    	public static String getValue(Element item, String str) {		
    		NodeList n = item.getElementsByTagName(str);		
    		return XMLfunctions.getElementValue(n.item(0));
    	}
    }
    svp aider moi pour retouver la faute

  4. #4
    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
    Bonjour,

    Déjà quel est ton problème exactement ?

    As tu une erreur qui apparaît ?

    Ou est ce que tu bloques exactement ?

    Utilise le debug ou les log pour voir exactement ce qu'il se pense dans ton code .

  5. #5
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    merci beaucoup mon probleme resolu
    c'est au niveau manifest.xml ; la declation du 2 eme activity

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2011, 17h00
  2. Comment adapter un ListView en fonction de l'objet appelant ?
    Par Xxbz3 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 18/12/2010, 16h42
  3. Utilisation de layout dans un custom adapter
    Par Radagastlebrun dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 09/11/2009, 15h03
  4. Réponses: 4
    Dernier message: 30/08/2009, 17h58
  5. Réponses: 2
    Dernier message: 05/08/2009, 14h30

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