/* * Based on the approach by Indrajit Khare described here: * http://logc.at/2011/10/10/handling-listviews-with-multiple-row-types/ */ package com.nbs.client.assassins.navigation; import com.nbs.client.assassins.R; import com.nbs.client.assassins.R.id; import com.nbs.client.assassins.R.layout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; public class MenuNavItem implements MenuListItem { private final LayoutInflater inflater; private final MenuNavData row; public MenuNavItem(LayoutInflater inflater, MenuNavData row) { this.inflater = inflater; this.row = row; } @Override public View getView(View convertView) { MenuNavItem.ViewHolder holder; View view; //we don't have a convertView so we'll have to create a new one if (convertView == null || !(convertView.getTag() instanceof MenuNavItem.ViewHolder)) { ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.menu_nav_item, null); //use the view holder pattern to save already looked up subviews holder = new MenuNavItem.ViewHolder((ImageView)viewGroup.findViewById(R.id.icon), (TextView)viewGroup.findViewById(R.id.text)); viewGroup.setTag(holder); view = viewGroup; } else { //get the holder back out holder = (MenuNavItem.ViewHolder)convertView.getTag(); view = convertView; } //actually setup the view holder.imageView.setImageResource(row.getImageId()); holder.textView.setText(row.getMainText()); return view; } @Override public int getViewType() { return MenuItemType.MENU_NAV.ordinal(); } private static class ViewHolder { final ImageView imageView; final TextView textView; private ViewHolder(ImageView imageView, TextView titleView) { this.imageView = imageView; this.textView = titleView; } } }