This is possible using the SimpleAdapter .
Here is an example:
// Create the item mapping String[] from = new String[] { "title", "description" }; int[] to = new int[] { R.id.title, R.id.description };
Now, "title" is displayed on R.id.title and "description" on R.id.description (defined in XML below).
// Add some rows List<HashMap<String, Object>> fillMaps = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("title", "First title"); // This will be shown in R.id.title map.put("description", "description 1"); // And this in R.id.description fillMaps.add(map); map = new HashMap<String, Object>(); map.put("title", "Second title"); map.put("description", "description 2"); fillMaps.add(map); SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.row, from, to); setListAdapter(adapter);
This is the corresponding XML layout called row.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout>
I used two TextViews, but it works the same with any view.
source share