2012-06-12 3 views
0

quelqu'un peut-il m'expliquer ce que je fais mal/ce que je dois faire?Définir dynamiquement des images dans la liste personnalisée

J'ai un listview qui obtient ses informations d'un tableau json. Mais il s'agit d'une liste personnalisée, avec 5 images et du texte sur chaque ligne. Chaque image possède un/drawable/image_selector avec des images différentes selon activé/désactivé. Je suis capable de définir dynamiquement le texte pour chaque ligne, en utilisant hashmap et un ListAdapter. Mais j'essaie de faire la même chose avec les images et je ne suis pas capable de le faire. utilise un adaptateur personnalisé le bon choix? et si oui, comment? Je n'ai pas compris à partir des exemples comment les utiliser.

Merci

est ici le code de l'activité donnée: DisponiveisActivity public class {étend ListActivity ; // icônes os para faire la mise en page

private ProgressDialog pDialog; 

//Object of class JSON Parser 
JSONParser jsonParser = new JSONParser(); 
ArrayList<HashMap<String, String>> disponiveislist; 


public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list); 


    disponiveislist = new ArrayList<HashMap<String, String>>(); 
    new Loaddisp().execute(); 

} 
//Background ASYNC task to load 

class Loaddisp extends AsyncTask<String, String, String>{ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(DisponiveisActivity.this); 
     pDialog.setMessage("Carregando"); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 



    protected String doInBackground(String... args) { 


       String nome = l.getString("NOME"); 
       String preco = l.getString("PRECO"); 
       String cfotografia = l.getString("COMFOTOGRAFIA"); 
       String cdados = l.getString("COMDADOS"); 
       String copiniao = l.getString("COMOPINIAO"); 

       String cdeslocacao = l.getString("COMDESLOCACAO"); 



       String distancia = l.getString("DISTANCIA"); 

       //create new HASHMAP      
       HashMap<String,String> map = new HashMap<String,String>(); 
       map.put("NOME", nome); 
       map.put("PRECO", preco); 
       map.put("DISTANCIA", distancia); 
       map.put("COMOPINIAO", copiniao); 
       map.put("COMDADOS", cdados); 
       map.put("COMFOTOGRAFIA", cfotografia); 
       //------------------------------ 


       disponiveislist.add(map); 

      } 




    @Override 
    protected void onPostExecute(String file_url) { 
     // TODO Auto-generated method stub 

     pDialog.dismiss(); 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 



        Log.d("PP",disponiveislist.toString()); 
       ListAdapter adapter = new SimpleAdapter(DisponiveisActivity.this, disponiveislist, R.layout.listrow,new String[]{"NOME","PRECO","DISTANCIA"}, new int[]{R.id.mission_name, R.id.preco, R.id.cdistancia}); 




       setListAdapter(adapter); 


      } 
     }); 
    } 



    } 

}

+1

Vous devriez probablement envoyer votre code afin que nous puissions voir s'il y a quelque chose de mal – Guardanis

+0

vient d'éditer avec quelques extraits de mon code – user1437481

Répondre

0

exemple Grand Je viens de découvrir sur Google: Dans ce cas, vous avez une seule image, je l'espère vraiment vous comprendrez comment dupliquer le code pour 5 images par ligne.

public class ItemsList extends ListActivity { 

private ItemsAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.items_list); 

     this.adapter = new ItemsAdapter(this, R.layout.items_list_item, ItemManager.getLoadedItems()); 
     setListAdapter(this.adapter); 
} 

private class ItemsAdapter extends ArrayAdapter<Item> { 

     private Item[] items; 

     public ItemsAdapter(Context context, int textViewResourceId, Item[] items) { 
       super(context, textViewResourceId, items); 
       this.items = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (v == null) { 
         LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.items_list_item, null); 
       } 

       Item it = items[position]; 
       if (it != null) { 
         ImageView iv = (ImageView) v.findViewById(R.id.list_item_image); 
         if (iv != null) { 
           iv.setImageDrawable(it.getImage()); 
         } 
       } 

       return v; 
     } 
} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
     this.adapter.getItem(position).click(this.getApplicationContext()); 
} 
} 
+0

ok, donc une boucle en utilisant les positions des éléments et la mise en l'image drawable serait suffisant puis? – user1437481

+0

Oui, bien sûr, ou iv1.setImageDrawable (it.getImage1()); iv2.setImageDrawable (it.getImage2()); iv3.setImageDrawable (it.getImage3()); iv4.setImageDrawable (it.getImage4()) ; iv5.setImageDrawable (it.getImage5()); –

Questions connexes