package com.nbs.client.assassins.controllers; import java.util.ArrayList; import java.util.List; import com.nbs.client.assassins.navigation.MenuEventData; import com.nbs.client.assassins.navigation.MenuEventItem; import com.nbs.client.assassins.navigation.MenuHeaderData; import com.nbs.client.assassins.navigation.MenuHeaderItem; import com.nbs.client.assassins.navigation.MenuItemType; import com.nbs.client.assassins.navigation.MenuListItem; import com.nbs.client.assassins.navigation.MenuNavData; import com.nbs.client.assassins.navigation.MenuNavItem; import com.nbs.client.assassins.navigation.MenuRowData; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; public class MenuAdapter extends BaseAdapter { private List<MenuListItem> rows; private Context context; public MenuAdapter(Context context) { this.context = context; rows = new ArrayList<MenuListItem>(); } public MenuAdapter(Context context, MenuRowData[] items) { this.context = context; rows = new ArrayList<MenuListItem>(); for (MenuRowData item : items) { add(item); } } @Override public int getViewTypeCount() { return MenuItemType.values().length; } @Override public int getItemViewType(int position) { return rows.get(position).getViewType(); } public int getCount() { return rows.size(); } public Object getItem(int position) { return rows.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { return rows.get(position).getView(convertView); } public void add(MenuRowData item) { rows.add(inflate(item)); } public void add(MenuRowData item, int index) { rows.add(index, inflate(item)); } private MenuListItem inflate(MenuRowData item) { MenuListItem inflated = null; if(item instanceof MenuNavData) inflated = new MenuNavItem(LayoutInflater.from(context), (MenuNavData)item); else if(item instanceof MenuHeaderData) inflated = new MenuHeaderItem(LayoutInflater.from(context), (MenuHeaderData)item); else if(item instanceof MenuEventData) inflated = new MenuEventItem(LayoutInflater.from(context), (MenuEventData)item); return inflated; } public void clear() { rows = new ArrayList<MenuListItem>(); } }