First, create a layout that organizes the views you want to appear in a single row. (See here for an example that groups two strings and an image.) Let's say you save this in a layout file called row_layout.xml and it has three TextViews with ids t1, t2, and t3.
Second, decide what data structure you are going to use for your data. We'll suppose it's an array of arrays of String, where each element contains the three strings you want to display in each row.
Third, you need to create a custom list adapter. If you're using the above array data structure, it might look something like this (adapted from here):
public class MySimpleArrayAdapter extends ArrayAdapter<String[]> {
private final Context context;
private final String[][] values;
public MySimpleArrayAdapter(Context context, String[][] values) {
super(context, R.layout.row_layout, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.row_layout, parent, false);
TextView textView1 = (TextView) rowView.findViewById(R.id.t1);
TextView textView2 = (TextView) rowView.findViewById(R.id.t2);
TextView textView3 = (TextView) rowView.findViewById(R.id.t3);
textView1.setText(values[position][0]);
textView2.setText(values[position][3]);
textView3.setText(values[position][2]);
return rowView;
}
}
Finally, in your ListActivity, add this in onCreate:
setListAdapter(new MySimpleArrayAdapter(this, values));
where values is the array of string arrays that you want displayed.