2010-11-18 3 views
0

Ich gebe Beschreibung Mein ProjektAndroid Liste Aktivität mit dynamisch geladenen Bilder bilden die Bahn in android

In meinem Projekt Im ersten Abschnitt i die XML-Daten von Videokategorien und Bild-URL-Links von My Web-Service analysiert haben. Ich habe diese Daten geparst und erhalten diese Daten in ArrayList in Meine Haupttätigkeit.Die erste ArrayList ist die Liste der Video-Kategorien und die zweite ArrayList ist die Liste der Videobild URLs und ich muss ArrayList von Bild-URLs als ImageView in ListView anzeigen Ich habe keine Ahnung, bitte gib mir eine Lösung.

+0

meine Probe Versuchen http://stackoverflow.com/questions/541966/android- how-do-i-do-a-lazy-load-of-images-in-listview/3068012 # 3068012 – Fedor

+0

danke fedor für deine Antwort, aber es ist zu komplex, um zu verstehen –

+0

Ich fürchte, es kann nicht einfacher gemacht werden . Sie können meine ImageLoader-Klasse einfach wiederverwenden, ohne alles darin zu verstehen. – Fedor

Antwort

1

Um etwas anderes als ein Array von String zu behandeln angezeigt als Textview in einem Listview, müssen Sie Ihren eigenen Individuell gestalteten Adapter schreiben (so Android weiß, wie diese Elemente anzuzeigen)

Hier ein Beispiel sind:

Ihre Aktivität:

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); 
} 

Ihre Aktivität des Layout (my_activity.xml hier):

<?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" 
/> 

Und Ihr individueller Adapter:

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; 
    } 
} 

Und schließlich Ihre Reihe Layout (my_row_layout.xml hier):

<?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" 
/>