Skip to content

Instantly share code, notes, and snippets.

@billmote
Last active August 29, 2015 14:06
Show Gist options
  • Save billmote/bb7ad6e54cb3eefb0022 to your computer and use it in GitHub Desktop.
Save billmote/bb7ad6e54cb3eefb0022 to your computer and use it in GitHub Desktop.
A ListView with 4 different row types built, originally, to populate a custom NavigationDrawer.
// ...
@DebugLog
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case android.R.id.home:
// Go back 1 screen as opposed to going all the way to "home"
// You can "add a favorite" then click to see a "contact detail" view.
// Going from contact detail view to home seemed abrupt.
this.getFragmentManager().popBackStack();
return true;
default:
}
return super.onOptionsItemSelected(item);
}
// All our Naviation Drawer Code
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private CircularImageView mUserPhoto;
@InjectView(R.id.navigation_drawer)
public DrawerLayout mDrawerLayout;
@InjectView(R.id.navigation_drawer_list)
public ListView mNavigationDrawerList;
public void setupDrawer() {
List<Object> dataList = new ArrayList<Object>();
dataList.add(new NavDrawerHeaderItem("Account Info"));
dataList.add(new NavDrawerContactItem("Account Name ... First and Last Name"));
dataList.add(new NavDrawerContactItem("Account Number ... 1-888-888-8888"));
dataList.add(new NavDrawerHeaderItem("Settings"));
dataList.add(new NavDrawerPreferenceItem("Notification Sounds ... checkbox"));
dataList.add(new NavDrawerHeaderItem("More Information"));
dataList.add(new NavDrawerLinkItem("Support ... >"));
dataList.add(new NavDrawerLinkItem("Privacy Policy ... >"));
dataList.add(new NavDrawerLinkItem("Terms of Use ... >"));
dataList.add(new NavDrawerLinkItem("LogOut ... >"));
NavigationDrawerAdapter adapter = new NavigationDrawerAdapter(this, R.layout.navigation_drawer_link_item, dataList);
LayoutInflater inflater = getLayoutInflater();
ViewGroup contactDetailsHeader = (ViewGroup)inflater.inflate(R.layout.navigation_drawer_header_row, mNavigationDrawerList, false);
mUserPhoto = (CircularImageView) contactDetailsHeader.findViewById(R.id.contact_photo);
final UserLocalStorageHandler userDB;
userDB = new UserLocalStorageHandler(this);
User currentUser = null;
try {
currentUser = userDB.getCurrentUser();
} catch (SQLException e) {
e.printStackTrace();
}
//mUserPhoto.setImageDrawable(currentUser.get);
mNavigationDrawerList.addHeaderView(contactDetailsHeader, null, false);
mNavigationDrawerList.setAdapter(adapter);
mNavigationDrawerList.setOnItemClickListener(new DrawerItemClickListener());
mTitle = mDrawerTitle = getTitle();
mDrawerLayout.setDrawerShadow(R.drawable.ic_launcher, GravityCompat.START);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_launcher, R.string.action_add_more, R.string.action_done) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SelectItem(position);
}
}
public void SelectItem(int possition) {
Fragment fragment = null;
Bundle args = new Bundle();
switch (possition) {
case 0:
default:
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggles
mDrawerToggle.onConfigurationChanged(newConfig);
}
// ...
/**
* Created by Bill on 9/3/14.
*/
public class NavigationDrawerAdapter extends ArrayAdapter<Object> {
private static final int HEADER_ROW = 0;
private static final int CONTACT_DETAIL_ROW = 1;
private static final int PREFERENCE_ROW = 2;
private static final int LINK = 3;
private static final int[] ROW_TYPES = {HEADER_ROW, CONTACT_DETAIL_ROW, PREFERENCE_ROW, LINK};
private Activity mHost;
private List<Object> mDrawerItemList = new ArrayList<Object>();
public NavigationDrawerAdapter(Activity activity, int resource, List<Object> objectList) {
super(activity, resource, objectList);
this.mHost = activity;
this.mDrawerItemList = objectList;
}
@Override
public int getItemViewType(int position) {
if (mDrawerItemList.get(position) instanceof NavDrawerLinkItem) {
return LINK;
} else if (mDrawerItemList.get(position) instanceof NavDrawerContactItem) {
return CONTACT_DETAIL_ROW;
} else if (mDrawerItemList.get(position) instanceof NavDrawerPreferenceItem) {
return PREFERENCE_ROW;
} else {
return HEADER_ROW;
}
}
@Override
public int getViewTypeCount() {
return ROW_TYPES.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinkItemHolder linkItemHolder;
ContactItemHolder contactItemHolder;
PreferenceItemHolder preferenceItemHolder;
HeaderItemHolder headerItemHolder;
LayoutInflater inflater = mHost.getLayoutInflater();
switch (getItemViewType(position)) {
case LINK:
// null our other view holders
contactItemHolder = null;
preferenceItemHolder = null;
headerItemHolder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.navigation_drawer_link_item, parent, false);
linkItemHolder = new LinkItemHolder(convertView);
convertView.setTag(linkItemHolder);
} else {
linkItemHolder = (LinkItemHolder) convertView.getTag();
}
NavDrawerLinkItem linkItem = (NavDrawerLinkItem) this.mDrawerItemList.get(position);
linkItemHolder.linkName.setText(linkItem.getItemName());
break;
case CONTACT_DETAIL_ROW:
// null our other view holders
linkItemHolder = null;
preferenceItemHolder = null;
headerItemHolder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.navigation_drawer_contact_item, parent, false);
contactItemHolder = new ContactItemHolder(convertView);
convertView.setTag(contactItemHolder);
} else {
contactItemHolder = (ContactItemHolder) convertView.getTag();
}
NavDrawerContactItem contactItem = (NavDrawerContactItem) this.mDrawerItemList.get(position);
contactItemHolder.someTextView.setText(contactItem.getItemName());
break;
case PREFERENCE_ROW:
// null our other view holders
linkItemHolder = null;
contactItemHolder = null;
headerItemHolder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.navigation_drawer_preference_item, parent, false);
preferenceItemHolder = new PreferenceItemHolder(convertView);
convertView.setTag(preferenceItemHolder);
} else {
preferenceItemHolder = (PreferenceItemHolder) convertView.getTag();
}
NavDrawerPreferenceItem preferenceItem = (NavDrawerPreferenceItem) this.mDrawerItemList.get(position);
preferenceItemHolder.someTextView.setText(preferenceItem.getItemName());
break;
case HEADER_ROW:
// null our other view holders
linkItemHolder = null;
contactItemHolder = null;
preferenceItemHolder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.navigation_drawer_header_item, parent, false);
headerItemHolder = new HeaderItemHolder(convertView);
convertView.setTag(headerItemHolder);
} else {
headerItemHolder = (HeaderItemHolder) convertView.getTag();
}
NavDrawerHeaderItem headerItem = (NavDrawerHeaderItem) this.mDrawerItemList.get(position);
headerItemHolder.someTextView.setText(headerItem.getItemName());
break;
}
return convertView;
}
private static class LinkItemHolder {
TextView linkName;
LinkItemHolder(View v) {
this.linkName = (TextView) v.findViewById(R.id.navigation_drawer_link_item);
}
}
private static class PreferenceItemHolder {
TextView someTextView;
PreferenceItemHolder(View v) {
this.someTextView = (TextView) v.findViewById(R.id.navigation_drawer_preference_item);
}
}
private static class HeaderItemHolder {
TextView someTextView;
HeaderItemHolder(View v) {
this.someTextView = (TextView) v.findViewById(R.id.navigation_drawer_header_item);
}
}
private static class ContactItemHolder {
TextView someTextView;
ContactItemHolder(View v) {
this.someTextView = (TextView) v.findViewById(R.id.navigation_drawer_contact_item);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment