This answer assumes that you already have a working navigation box and you just need to add icons and a number
This is how I do it. Take, for example, the News app. Your navigation box has Local News , Foreign News and Alien News . What you need to have icons, headers and counters is to define a custom adapter and model class.
Model Class:
public class NavDrawerItem { private String title; private int icon; private int count; private boolean isLocalNews; private boolean isForeignNews; private boolean isAlienNews; private boolean hasIcon; private boolean isCounterVisible = false;
Then, in the user adapter, do the following:
public class NavDrawerListAdapter extends BaseAdapter { private Context context; private ArrayList<NavDrawerItem> navDrawerItems; public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){ this.context = context; this.navDrawerItems = navDrawerItems; } @Override public int getCount() { return navDrawerItems.size(); } @Override public Object getItem(int position) { return navDrawerItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.drawer_list_item, null); } ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon); TextView txtTitle = (TextView) convertView.findViewById(R.id.title); TextView countTxt = (TextView) convertView.findViewById(R.id.debtCounter); imgIcon.setImageResource(navDrawerItems.get(position).getIcon());
And then in the operation, initialize the following elements:
// load slide menu items navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); // nav drawer icons from resources TypedArray navMenuIcons = getResources() .obtainTypedArray(R.array.nav_drawer_icons); ArrayList<NavDrawerItem> navDrawerItems = new ArrayList<>(); //Create an array of navigation drawer items. //local news navDrawerItems.add(new NavDrawerItem( navMenuTitles[0], //Title true, //hasIcon navMenuIcons.getResourceId(0, -1), //Icon resource true, //is counter visible? true) //is localNews? false) //is foreignNews? false) //is alienNews? ); //Foreign news navDrawerItems.add(new NavDrawerItem( navMenuTitles[1], //Title true, //hasIcon navMenuIcons.getResourceId(1, -1), //Icon resource true, //is counter visible? false) //is localNews? true) //is foreignNews? false) //is alienNews? ); //Alien news, since we know nothing about aliens we won't add icons and counter navDrawerItems.add(new NavDrawerItem( navMenuTitles[2], //Title false, //hasIcon navMenuIcons.getResourceId(2, -1), //Icon resource false, //is counter visible? false) //is localNews? false) //is foreignNews? true) //is alienNews? );
In the string resource file, add the following:
<array name="nav_drawer_icons"> <item>@drawable/ic_localnews</item> <item>@drawable/ic_foreignnews</item> <item>@drawable/ic_aliensnews</item> </array> <string-array name="nav_drawer_items"> <item> Local News </item> <item> Foreign News </item> <item> Alien News </item> </string-array>