title: Manage toolbar's navigation and back button from fragment in android
body: <p>All of my fragments are controlled through <code>ActionBarActivity</code> (mainActivity), inside mainActivity a <code>DrawerLayout</code> is implemented and all the child fragments are pushed through drawerLayout's list item click. The problem that I'm facing is after pushing a fragment through drawerLayout I want to change the drawer icon into back icon of <code>ToolBar</code> so that user can navigate to previous fragment and to handle the callback of <code>android.R.id.home</code> either inside the same fragment or inside the mainActivity.</p>
  
  <p>The code that I am using is:</p>
  
  <p><strong>MainActivity.java</strong></p>
  
  <pre><code>public class MainActivity extends ActionBarActivity {
      private DrawerLayout layoutDrawer;
      private ActionBarDrawerToggle drawerToggler;
      private Stack&lt;Fragment&gt; stack;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
          stack = new Stack&lt;Fragment&gt;();
          layoutDrawer = (DrawerLayout) findViewById(R.id.layout_drawer);
          drawerToggler = new ActionBarDrawerToggle(this, layoutDrawer, toolbar,
                  R.string.app_name, R.string.app_name);
          layoutDrawer.setDrawerListener(drawerToggler);
  
          setUpDrawerList();
          pushFragment(new FirstFragment(), true);
  
          Session.setContext(getApplicationContext());
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.main, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          if (drawerToggler.isDrawerIndicatorEnabled()
                  &amp;&amp; drawerToggler.onOptionsItemSelected(item))
              return true;
          switch (item.getItemId()) {
          case android.R.id.home:
              Toast.makeText(this, "Back from activity", Toast.LENGTH_SHORT)
                      .show();
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  
      @Override
      protected void onPostCreate(Bundle savedInstanceState) {
          super.onPostCreate(savedInstanceState);
          drawerToggler.syncState();
      }
  
      @Override
      public void onBackPressed() {
          popFragment();
      }
  
      private void setUpDrawerList() {
          ListView listView = (ListView) findViewById(R.id.list_drawer);
          ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(this,
                  android.R.layout.simple_list_item_1,
                  Arrays.asList(new String[] { "First Fragment",
                          "Second Fragment" }));
          listView.setAdapter(adapter);
          listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  
              @Override
              public void onItemClick(AdapterView&lt;?&gt; parent, View view,
                      int position, long id) {
                  layoutDrawer.closeDrawers();
                  drawerToggler.setDrawerIndicatorEnabled(false);
                  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                  pushFragment(getFragment(position), true);
              }
          });
      }
  
      private Fragment getFragment(int pos) {
          switch (pos) {
          case 0:
              return new FirstFragment();
          case 1:
              return new SecondFragment();
          }
          return null;
      }
  
      public void pushFragment(Fragment fragment, boolean add) {
          FragmentTransaction transation = getSupportFragmentManager()
                  .beginTransaction();
          if (add)
              stack.push(fragment);
          transation.replace(R.id.layout_content, fragment);
          transation.commit();
      }
  
      public void popFragment() {
          if (!stack.isEmpty()) {
              Fragment fragment = stack.elementAt(stack.size() - 2);
              stack.pop();
              pushFragment(fragment, false);
          } else
              super.onBackPressed();
          drawerToggler.setDrawerIndicatorEnabled(stack.size() == 1);
      }
  
      public void clearBackStack() {
          stack.clear();
      }
  }
  </code></pre>
  
  <p><strong>FirstFragment.java</strong></p>
  
  <pre><code>public class FirstFragment extends Fragment {
  
      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          setHasOptionsMenu(true);
      }
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
          return inflater.inflate(R.layout.fragment_first, container, false);
      }
  
      @Override
      public void onResume() {
          super.onResume();
          ActionBar actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();
          actionBar.setTitle("First Fragment");
          actionBar.setDisplayHomeAsUpEnabled(true);
          actionBar.setHomeButtonEnabled(true);
      }
  
      @Override
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
          super.onCreateOptionsMenu(menu, inflater);
          menu.clear();
          inflater.inflate(R.menu.fragment_menu, menu);
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch(item.getItemId()) {
          case android.R.id.home:
              Toast.makeText(getActivity(), "Back from fragment", Toast.LENGTH_SHORT).show();
              getActivity().onBackPressed();
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  }
  </code></pre>
  
  <p>From the above code I am not able to get the callback of <code>android.R.id.home</code> and setting home button is not working everytime <code>actionBar.setDisplayHomeAsUpEnabled(true);</code> <code>actionBar.setHomeButtonEnabled(true);</code></p>
  
  <p>Any help will be really appreciated.</p>
  
  <p>Thanks</p>