2010-11-18 4 views
0

Je donne la description de mon projetActivité Liste Android avec des images chargées dynamiquement forment le web dans Android

Dans mon projet Dans la première partie, je l'ai analysé les données XML de catégories vidéo et des liens URL de l'image de mon service Web. J'ai analysé ces données et de recevoir ces données dans ArrayList dans Mon activité principale.La première ArrayList est la liste des catégories de vidéo et la seconde ArrayList est la la liste des URL de l'image vidéo et je dois afficher ArrayList de l'image urls comme ImageView dans ListView , je n'ai aucune idée pour cela, s'il vous plaît donnez-moi une solution.

+0

Essayez mon échantillon http://stackoverflow.com/questions/541966/android- how-do-i-do-a-fainéant-des-images-dans-listview/3068012 # 3068012 – Fedor

+0

Merci thanx pour votre réponse, mais il est trop complexe à comprendre –

+0

Je crains que cela ne peut pas être fait plus facile . Vous pouvez simplement réutiliser ma classe ImageLoader sans tout comprendre à l'intérieur. – Fedor

Répondre

1

Afin de gérer quelque chose d'autre qu'un tableau de chaîne affichée comme TextView dans un ListView, vous devez écrire votre propre adaptateur personnalisé (si Android sait comment afficher ces articles)

Voici un exemple:

Votre activité:

public class MyActivity extends Activity{ 
    private ArrayList<URL> MY_DATA; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Sets the View of the Activity 
     setContentView(R.layout.my_activity); 
     ListView myList = (ListView) findViewById(R.id.myList); 
     MyAdapter adapter = new MyAdapter(this, MY_DATA); 
     listView.setAdapter(adapter); 
} 

votre mise en page de l'activité (my_activity.xml ici):

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myList" 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
/> 

Et votre adaptateur personnalisé:

public class MyAdapter extends BaseAdapter{ 
    private LayoutInflater inflater; 
    private ArrayList<URL> data; 

    public EventAdapter(Context context, ArrayList<URL> data){ 
    // Caches the LayoutInflater for quicker use 
    this.inflater = LayoutInflater.from(context); 
    // Sets the events data 
    this.data= data; 
    } 

    public int getCount() { 
     return this.data.size(); 
    } 

    public URL getItem(int position) throws IndexOutOfBoundsException{ 
     return this.data.get(position); 
    } 

    public long getItemId(int position) throws IndexOutOfBoundsException{ 
     if(position < getCount() && position >= 0){ 
      return position; 
     } 
    } 

    public int getViewTypeCount(){ 
     return 1; 
    } 

    public View getView(int position, View convertView, ViewGroup parent){ 
     URL myUrl = getItem(position); 
     ViewHolder holder = new ViewHolder(); // Use a ViewHolder to save your ImageView, in order not to have to do an expensive findViewById for each iteration 

     // DO WHAT YOU WANT WITH YOUR URL (Start a new activity to download image?) 

     if(convertView == null){ // If the View is not cached 
     // Inflates the Common View from XML file 
     convertView = this.inflater.inflate(R.id.my_row_layout, null); 
      holder.myImageView = (ImageView)findViewById(R.id.myRowImageView); 
      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.myImageView.setImageBitmap(MY_BITMAP_I_JUST_DOWNLOADED); 

     return convertView; 
    } 

    static class ViewHolder{ 
    ImageView myImageView; 
    } 
} 

Et enfin la mise en page de votre ligne (my_row_layout.xml ici):

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myRowImageView" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
/>