How to Display Navigation Drawer in all activities?
android, android-actionbar-compat, java, navigation-drawer
Solution
in `onCreate` of `TutorialActivity` don't call `setContentView` instead do this:
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView = inflater.inflate(R.layout.help, null, false);
mDrawer.addView(contentView, 0);
}
make `mDrawer` in `MainActivity` protected. and in `R.layout.activity_main_drawer` just keep drawer tag and the element with gravity left(or right).
Problem
I have a `Navigation Drawer` which should appear in all my activities. I saw many questions similar to this & found a solution like Extending the MainActivity with the Other Activities . So i extended My Main Activity to my Second Activity.But the Drawer is not being showed in the Second Activity MainActivity ``` public class MainActivity extends ActionBarActivity { private ListView mDrawerList; private DrawerLayout mDrawer; private CustomActionBarDrawerToggle mDrawerToggle; private String[] menuItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR); // getSupportActionBar().hide(); setContentView(R.layout.activity_main_drawer); // enable ActionBar app icon to behave as action to toggle nav drawer getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); // set a custom shadow that overlays the main content when the drawer // opens mDrawer.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); _initMenu(); mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer); mDrawer.setDrawerListener(mDrawerToggle); } private void _initMenu() { NsMenuAdapter mAdapter = new NsMenuAdapter(this); // Add Header mAdapter.addHeader(R.string.ns_menu_main_header); // Add first block menuItems = getResources().getStringArray(R.array.ns_menu_items); String[] menuItemsIcon = getResources().getStringArray(R.array.ns_menu_items_icon); int res = 0; for (String item : menuItems) { int id_title = getResources().getIdentifier(item, "string", this.getPackageName()); int id_icon = getResources().getIdentifier(menuItemsIcon[res], "drawable", this.getPackageName()); NsMenuItemModel mItem = new NsMenuItemModel(id_title, id_icon); // if (res==1) mItem.counter=12; //it is just an example... // if (res==3) mItem.counter=3; //it is just an example... mAdapter.addItem(mItem); res++; } mAdapter.addHeader(R.string.ns_menu_main_header2); mDrawerList = (ListView) findViewById(R.id.drawer); if (mDrawerList != null) mDrawerList.setAdapter(mAdapter); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); } @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); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.control_menu, menu); return super.onCreateOptionsMenu(menu); } /* Called whenever we call invalidateOptionsMenu() */ @Override public boolean onPrepareOptionsMenu(Menu menu) { // If the nav drawer is open, hide action items related to the content // view boolean drawerOpen = mDrawer.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_keyboard).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { /* * The action bar home/up should open or close the drawer. * ActionBarDrawerToggle will take care of this. */ if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } // Handle your other action bar items... return super.onOptionsItemSelected(item); } private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle { public CustomActionBarDrawerToggle(Activity mActivity, DrawerLayout mDrawerLayout) { super(mActivity, mDrawerLayout, R.drawable.ic_drawer, R.string.ns_menu_open, R.string.ns_menu_close); } @Override public void onDrawerClosed(View view) { getSupportActionBar().setTitle(getString(R.string.ns_menu_close)); supportInvalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } @Override public void onDrawerOpened(View drawerView) { getSupportActionBar().setTitle(getString(R.string.ns_menu_open)); supportInvalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, Tutorial.class); startActivity(intent); } } } ``` SecondActivity ``` public class Tutorial extends MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.help); } } ```