In order to handle something else than an Array of String displayed as TextView in a ListView, you need to write your own Custom Adapter (so Android knows how to display those items)
Here is an example:
Your Activity:
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);
}
Your Activity's Layout (my_activity.xml here):
<?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"
/>
And your custom 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;
}
}
And finally your row's layout (my_row_layout.xml here):
<?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"
/>