I start of with this in Activity:
adapter = new ItemAdapter(Items.this, items, totals);
setListAdapter(adapter);
Now here is ItemAd
I suggests using a SimpleAdapter. Here is how to convert your Lists into one List< Map<...>> (but I recommend just building one List< Map<...>> when you are building the separate lists):
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map;
int count = items.size();
for(int i = 0; i < count; i++) {
map = new HashMap<String, String>();
map.put("name", items.get(i));
map.put("total", totals.get(i));
list.add(map);
}
adapter = new SimpleAdapter(this, list, R.layout.item_row_layout, new String[] { "name", "total" }, new int[] { R.id.itemName, R.id.itemTotal });
Now your name
and total
are automatically displayed in one row in their own Views without having to write a custom adapter.
One option you have is to alter the constructor to accept a List<List<String>>
instead of List<String>
Then instead of doing this.items = items;
you'll have to iterate through all of the subLists in your parameter and add each element to your local object items.
Another and perhaps more straightforward solution is to merge your mulptiple lists before sending it in to the constructor as a parameter. i.e. you could use a method like List.addAll() like this
List.addAll(anotherListObject);
as many times as you need to make one List that contains all of your items.
And yet another option is to use the MergeAdapter that CommonsGuy has created and graciously open sourced to simplify the process by letting you create multiple adapters and then merging them all into one MergeAdapter instead of worrying about merging the Lists
Why don't you just join both lists?
List<String> list1 = new ArrayList<String>();
a.add("Item 1");
a.add("Item 2");
List<String> list2 = new ArrayList<String>();
b.add("Item 3");
b.add("Item 4");
// Append content of list2 to list1
list1.addAll(list2);
Then you can create your adapter as usual, with a single List.
Add one more argument in your constructor-- to accommodate the additional List; however don't pass that additional list in the super call.
Then in the getView method access that second list. Take a look at the code:
public class NotificationsAdapter extends ArrayAdapter<String> {
private Context context;
private List<String> list;
private List<String> listTimeStamp;
public NotificationsAdapter(Context context, List<String> resource,List<String> timeResource) {
super(context, R.layout.notification_list_item, resource);
this.context = context;
this.list = resource;
this.listTimeStamp= timeResource;
}
@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.notification_list_item, parent, false);
TextView textViewMessage = (TextView) rowView.findViewById(R.id.text_view_notifications_list_item);
textViewMessage.setText(list.get(position));
ImageView imageView = (ImageView) rowView.findViewById(R.id.logo_notifications_list_item);
imageView.setImageResource(R.drawable.iconsmall);
TextView textViewTimeStamp = (TextView) rowView.findViewById(R.id.time_stamp_notifications_list_item);
textViewTimeStamp.setText(listTimeStamp.get(position));
return rowView;
}
}