Android TabLayout Android Design
I've just managed to setup new TabLayout, so here are the quick steps to do this (ノ◕ヮ◕)ノ*:・゚✧
Add dependencies inside your build.gradle file:
dependencies { compile 'com.android.support:design:23.1.1'}
Add TabLayout inside your layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary"/> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content"/> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
Setup your Activity like this:
import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;public class TabLayoutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_to_refresh); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); ViewPager viewPager = (ViewPager) findViewById(R.id.pager); if (toolbar != null) { setSupportActionBar(toolbar); } viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager())); tabLayout.setupWithViewPager(viewPager); } public class SectionPagerAdapter extends FragmentPagerAdapter { public SectionPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new FirstTabFragment(); case 1: default: return new SecondTabFragment(); } } @Override public int getCount() { return 2; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "First Tab"; case 1: default: return "Second Tab"; } } }}
I had to collect information from various sources to put together a functioning TabLayout. The following is presented as a complete use case that can be modified as needed.
Make sure the module build.gradle
file contains a dependency on com.android.support:design
.
dependencies { compile 'com.android.support:design:23.1.1'}
In my case, I am creating an About activity in the application with a TabLayout. I added the following section to AndroidMainifest.xml
. Setting the parentActivityName allows the home arrow to take the user back to the main activity.
<!-- android:configChanges="orientation|screenSize" makes the activity not reload when the orientation changes. --><activity android:name=".AboutActivity" android:label="@string/about_app" android:theme="@style/MyApp.About" android:parentActivityName=".MainActivity" android:configChanges="orientation|screenSize" > <!-- android.support.PARENT_ACTIVITY is necessary for API <= 15. --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /></activity>
styles.xml
contains the following entries. This app has a white AppBar for the main activity and a blue AppBar for the About activity. We need to set colorPrimaryDark
for the About activity so that the status bar above the AppBar is blue.
<style name="MyApp" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorAccent">@color/blue</item></style><style name="MyApp.About" /><!-- ThemeOverlay.AppCompat.Dark.ActionBar" makes the text and the icons in the AppBar white. --><style name="MyApp.DarkAppBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /><style name="MyApp.AppBarOverlay" parent="ThemeOverlay.AppCompat.ActionBar" /><style name="MyApp.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
There is also a styles.xml (v19)
. It is located at src/main/res/values-v19/styles.xml
. This file is only applied if the API of the device is >= 19.
<!-- android:windowTranslucentStatus requires API >= 19. It makes the system status bar transparent. When it is specified the root layout should include android:fitsSystemWindows="true". colorPrimaryDark goes behind the status bar, which is then darkened by the overlay. --><style name="MyApp.About"> <item name="android:windowTranslucentStatus">true</item> <item name="colorPrimaryDark">@color/blue</item></style>
AboutActivity.java
contains the following code. In my case I have a fixed number of tabs (7) so I could remove all the code dealing with dynamic tabs.
import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;public class AboutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about_coordinatorlayout); // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21. Toolbar supportAppBar = (Toolbar) findViewById(R.id.about_toolbar); setSupportActionBar(supportAppBar); // Display the home arrow on supportAppBar. final ActionBar appBar = getSupportActionBar(); assert appBar != null;// This assert removes the incorrect warning in Android Studio on the following line that appBar might be null. appBar.setDisplayHomeAsUpEnabled(true); // Setup the ViewPager. ViewPager aboutViewPager = (ViewPager) findViewById(R.id.about_viewpager); assert aboutViewPager != null; // This assert removes the incorrect warning in Android Studio on the following line that aboutViewPager might be null. aboutViewPager.setAdapter(new aboutPagerAdapter(getSupportFragmentManager())); // Setup the TabLayout and connect it to the ViewPager. TabLayout aboutTabLayout = (TabLayout) findViewById(R.id.about_tablayout); assert aboutTabLayout != null; // This assert removes the incorrect warning in Android Studio on the following line that aboutTabLayout might be null. aboutTabLayout.setupWithViewPager(aboutViewPager); } public class aboutPagerAdapter extends FragmentPagerAdapter { public aboutPagerAdapter(FragmentManager fm) { super(fm); } @Override // Get the count of the number of tabs. public int getCount() { return 7; } @Override // Get the name of each tab. Tab numbers start at 0. public CharSequence getPageTitle(int tab) { switch (tab) { case 0: return getString(R.string.version); case 1: return getString(R.string.permissions); case 2: return getString(R.string.privacy_policy); case 3: return getString(R.string.changelog); case 4: return getString(R.string.license); case 5: return getString(R.string.contributors); case 6: return getString(R.string.links); default: return ""; } } @Override // Setup each tab. public Fragment getItem(int tab) { return AboutTabFragment.createTab(tab); } }}
AboutTabFragment.java
is used to populate each tab. In my case, the first tab has a LinearLayout
inside of a ScrollView
and all the others have a WebView
as the root layout.
import android.os.Build;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.webkit.WebView;import android.widget.TextView;public class AboutTabFragment extends Fragment { private int tabNumber; // AboutTabFragment.createTab stores the tab number in the bundle arguments so it can be referenced from onCreate(). public static AboutTabFragment createTab(int tab) { Bundle thisTabArguments = new Bundle(); thisTabArguments.putInt("Tab", tab); AboutTabFragment thisTab = new AboutTabFragment(); thisTab.setArguments(thisTabArguments); return thisTab; } @Override public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Store the tab number in tabNumber. tabNumber = getArguments().getInt("Tab"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View tabLayout; // Load the about tab layout. Tab numbers start at 0. if (tabNumber == 0) { // Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container. // The fragment will take care of attaching the root automatically. tabLayout = inflater.inflate(R.layout.about_tab_version, container, false); } else { // load a WebView for all the other tabs. Tab numbers start at 0. // Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container. // The fragment will take care of attaching the root automatically. tabLayout = inflater.inflate(R.layout.about_tab_webview, container, false); WebView tabWebView = (WebView) tabLayout; switch (tabNumber) { case 1: tabWebView.loadUrl("file:///android_asset/about_permissions.html"); break; case 2: tabWebView.loadUrl("file:///android_asset/about_privacy_policy.html"); break; case 3: tabWebView.loadUrl("file:///android_asset/about_changelog.html"); break; case 4: tabWebView.loadUrl("file:///android_asset/about_license.html"); break; case 5: tabWebView.loadUrl("file:///android_asset/about_contributors.html"); break; case 6: tabWebView.loadUrl("file:///android_asset/about_links.html"); break; default: break; } } return tabLayout; }}
about_coordinatorlayout.xml
is as follows:
<!-- android:fitsSystemWindows="true" moves the AppBar below the status bar. When it is specified the theme should include <item name="android:windowTranslucentStatus">true</item> to make the status bar a transparent, darkened overlay. --><android.support.design.widget.CoordinatorLayout android:id="@+id/about_coordinatorlayout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" android:fitsSystemWindows="true" > <!-- the LinearLayout with orientation="vertical" moves the ViewPager below the AppBarLayout. --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- We need to set android:background="@color/blue" here or any space to the right of the TabLayout on large devices will be white. --> <android.support.design.widget.AppBarLayout android:id="@+id/about_appbarlayout" android:layout_height="wrap_content" android:layout_width="match_parent" android:background="@color/blue" android:theme="@style/MyApp.AppBarOverlay" > <!-- android:theme="@style/PrivacyBrowser.DarkAppBar" makes the text and icons in the AppBar white. --> <android.support.v7.widget.Toolbar android:id="@+id/about_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/blue" android:theme="@style/MyApp.DarkAppBar" app:popupTheme="@style/MyApp.PopupOverlay" /> <android.support.design.widget.TabLayout android:id="@+id/about_tablayout" xmlns:android.support.design="http://schemas.android.com/apk/res-auto" android:layout_height="wrap_content" android:layout_width="match_parent" android.support.design:tabBackground="@color/blue" android.support.design:tabTextColor="@color/light_blue" android.support.design:tabSelectedTextColor="@color/white" android.support.design:tabIndicatorColor="@color/white" android.support.design:tabMode="scrollable" /> </android.support.design.widget.AppBarLayout> <!-- android:layout_weight="1" makes about_viewpager fill the rest of the screen. --> <android.support.v4.view.ViewPager android:id="@+id/about_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout></android.support.design.widget.CoordinatorLayout>
about_tab_version.xml
is as follows:
<!-- The ScrollView allows the LinearLayout to scroll if it exceeds the height of the page. --><ScrollView android:id="@+id/about_version_scrollview" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent" > <LinearLayout android:id="@+id/about_version_linearlayout" android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="vertical" android:padding="16dp" > <!-- Include whatever content you want in this tab here. --> </LinearLayout></ScrollView>
And about_tab_webview.xml
:
<!-- This WebView displays inside of the tabs in AboutActivity. --><WebView android:id="@+id/about_tab_webview" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" />
There are also entries in strings.xml
<string name="about_app">About App</string><string name="version">Version</string><string name="permissions">Permissions</string><string name="privacy_policy">Privacy Policy</string><string name="changelog">Changelog</string><string name="license">License</string><string name="contributors">Contributors</string><string name="links">Links</string>
And colors.xml
<color name="blue">#FF1976D2</color><color name="light_blue">#FFBBDEFB</color><color name="white">#FFFFFFFF</color>
src/main/assets
contains the HTML files referenced in AboutTabFragemnt.java
.
I am facing some issue with menu change when fragment changes in ViewPager. I ended up implemented below code.
DashboardFragment
public class DashboardFragment extends BaseFragment { private Context mContext; private TabLayout mTabLayout; private ViewPager mViewPager; private DashboardPagerAdapter mAdapter; private OnModuleChangeListener onModuleChangeListener; private NavDashBoardActivity activityInstance; public void setOnModuleChangeListener(OnModuleChangeListener onModuleChangeListener) { this.onModuleChangeListener = onModuleChangeListener; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.dashboard_fragment, container, false); } //pass -1 if you want to get it via pager public Fragment getFragmentFromViewpager(int position) { if (position == -1) position = mViewPager.getCurrentItem(); return ((Fragment) (mAdapter.instantiateItem(mViewPager, position))); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mContext = getActivity(); activityInstance = (NavDashBoardActivity) getActivity(); mTabLayout = (TabLayout) view.findViewById(R.id.tab_layout); mViewPager = (ViewPager) view.findViewById(R.id.view_pager); final List<EnumUtils.Module> moduleToShow = getModuleToShowList(); mViewPager.setOffscreenPageLimit(moduleToShow.size()); for(EnumUtils.Module module :moduleToShow) mTabLayout.addTab(mTabLayout.newTab().setText(EnumUtils.Module.getTabText(module))); updateTabPagerAndMenu(0 , moduleToShow); mAdapter = new DashboardPagerAdapter(getFragmentManager(),moduleToShow); mViewPager.setOffscreenPageLimit(mAdapter.getCount()); mViewPager.setAdapter(mAdapter); mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(final TabLayout.Tab tab) { mViewPager.post(new Runnable() { @Override public void run() { mViewPager.setCurrentItem(tab.getPosition()); } }); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //added to redraw menu on scroll } @Override public void onPageSelected(int position) { updateTabPagerAndMenu(position , moduleToShow); } @Override public void onPageScrollStateChanged(int state) { } }); } //also validate other checks and this method should be in SharedPrefs... public static List<EnumUtils.Module> getModuleToShowList(){ List<EnumUtils.Module> moduleToShow = new ArrayList<>(); moduleToShow.add(EnumUtils.Module.HOME); moduleToShow.add(EnumUtils.Module.ABOUT); return moduleToShow; } public void setCurrentTab(final int position){ if(mViewPager != null){ mViewPager.postDelayed(new Runnable() { @Override public void run() { mViewPager.setCurrentItem(position); } },100); } } private Fragment getCurrentFragment(){ return mAdapter.getCurrentFragment(); } private void updateTabPagerAndMenu(int position , List<EnumUtils.Module> moduleToShow){ //it helps to change menu on scroll //http://stackoverflow.com/a/27984263/3496570 //No effect after changing below statement ActivityCompat.invalidateOptionsMenu(getActivity()); if(mTabLayout != null) mTabLayout.getTabAt(position).select(); if(onModuleChangeListener != null){ if(activityInstance != null){ activityInstance.updateStatusBarColor( EnumUtils.Module.getStatusBarColor(moduleToShow.get(position))); } onModuleChangeListener.onModuleChanged(moduleToShow.get(position)); mTabLayout.setSelectedTabIndicatorColor(EnumUtils.Module.getModuleColor(moduleToShow.get(position))); mTabLayout.setTabTextColors(ContextCompat.getColor(mContext,android.R.color.black) , EnumUtils.Module.getModuleColor(moduleToShow.get(position))); } }}
dashboardfragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!-- our tablayout to display tabs --> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:tabBackground="@android:color/white" app:tabGravity="fill" app:tabIndicatorHeight="4dp" app:tabMode="scrollable" app:tabSelectedTextColor="@android:color/black" app:tabTextColor="@android:color/black" /> <!-- View pager to swipe views --> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /></LinearLayout>
DashboardPagerAdapter
public class DashboardPagerAdapter extends FragmentPagerAdapter {private List<EnumUtils.Module> moduleList;private Fragment mCurrentFragment = null;public DashboardPagerAdapter(FragmentManager fm, List<EnumUtils.Module> moduleList){ super(fm); this.moduleList = moduleList;}@Overridepublic Fragment getItem(int position) { return EnumUtils.Module.getDashboardFragment(moduleList.get(position));}@Overridepublic int getCount() { return moduleList.size();}@Overridepublic void setPrimaryItem(ViewGroup container, int position, Object object) { if (getCurrentFragment() != object) { mCurrentFragment = ((Fragment) object); } super.setPrimaryItem(container, position, object);}public Fragment getCurrentFragment() { return mCurrentFragment;}public int getModulePosition(EnumUtils.Module moduleName){ for(int x = 0 ; x < moduleList.size() ; x++){ if(moduleList.get(x).equals(moduleName)) return x; } return -1;}
}
And in each page of Fragment setHasOptionMenu(true)
in onCreate and implement onCreateOptionMenu
. then it will work properly.
dASHaCTIVITY
public class NavDashBoardActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener { private Context mContext; private DashboardFragment dashboardFragment; private Toolbar mToolbar; private DrawerLayout drawer; private ActionBarDrawerToggle toggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nav_dash_board); mContext = NavDashBoardActivity.this; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().setStatusBarColor(ContextCompat.getColor(mContext,R.color.yellow_action_bar)); } mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); updateToolbarText(new ToolbarTextBO("NCompass " ,"")); drawer = (DrawerLayout) findViewById(R.id.drawer_layout); toggle = new ActionBarDrawerToggle( this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); //onclick of back button on Navigation it will popUp fragment... toggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(!toggle.isDrawerIndicatorEnabled()) { getSupportFragmentManager().popBackStack(); } } }); final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setItemIconTintList(null);//It helps to show icon on Navigation updateNavigationMenuItem(navigationView); navigationView.setNavigationItemSelectedListener(this); //Left Drawer Upper Section View headerLayout = navigationView.getHeaderView(0); // 0-index header TextView userNameTv = (TextView) headerLayout.findViewById(R.id.tv_user_name); userNameTv.setText(AuthSharePref.readUserLoggedIn().getFullName()); RoundedImageView ivUserPic = (RoundedImageView) headerLayout.findViewById(R.id.iv_user_pic); ivUserPic.setImageResource(R.drawable.profile_img); headerLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //close drawer and add a fragment to it drawer.closeDrawers();//also try other methods.. } }); //ZA code starts... dashboardFragment = new DashboardFragment(); dashboardFragment.setOnModuleChangeListener(new OnModuleChangeListener() { @Override public void onModuleChanged(EnumUtils.Module module) { if(mToolbar != null){ mToolbar.setBackgroundColor(EnumUtils.Module.getModuleColor(module)); if(EnumUtils.Module.getMenuID(module) != -1) navigationView.getMenu().findItem(EnumUtils.Module.getMenuID(module)).setChecked(true); } } }); addBaseFragment(dashboardFragment); backStackListener(); } public void updateStatusBarColor(int colorResourceID){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().setStatusBarColor(colorResourceID); } } private void updateNavigationMenuItem(NavigationView navigationView){ List<EnumUtils.Module> modules = DashboardFragment.getModuleToShowList(); if(!modules.contains(EnumUtils.Module.MyStores)){ navigationView.getMenu().findItem(R.id.nav_my_store).setVisible(false); } if(!modules.contains(EnumUtils.Module.Livewall)){ navigationView.getMenu().findItem(R.id.nav_live_wall).setVisible(false); } } private void backStackListener(){ getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { if(getSupportFragmentManager().getBackStackEntryCount() >= 1) { toggle.setDrawerIndicatorEnabled(false); //disable "hamburger to arrow" drawable toggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_black_24dp); //set your own ///toggle.setDrawerArrowDrawable(); ///toggle.setDrawerIndicatorEnabled(false); // this will hide hamburger image ///Toast.makeText(mContext,"Update to Arrow",Toast.LENGTH_SHORT).show(); } else{ toggle.setDrawerIndicatorEnabled(true); } if(getSupportFragmentManager().getBackStackEntryCount() >0){ if(getCurrentFragment() instanceof DashboardFragment){ Fragment subFragment = ((DashboardFragment) getCurrentFragment()) .getViewpager(-1); } } else{ } } }); } private void updateToolBarTitle(String title){ getSupportActionBar().setTitle(title); } public void updateToolBarColor(String hexColor){ if(mToolbar != null) mToolbar.setBackgroundColor(Color.parseColor(hexColor)); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { if (drawer.isDrawerOpen(GravityCompat.START)) getMenuInflater().inflate(R.menu.empty, menu); return super.onCreateOptionsMenu(menu);//true is wriiten first.. } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { if (drawer.isDrawerOpen(GravityCompat.START)) drawer.closeDrawer(GravityCompat.START); else { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { } else drawer.openDrawer(GravityCompat.START); } return false;///true; } return false;// false so that fragment can also handle the menu event. Otherwise it is handled their ///return super.onOptionsItemSelected(item); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_my_store) { // Handle the camera action dashboardFragment.setCurrentTab(EnumUtils.Module.MyStores); } }else if (id == R.id.nav_log_out) { Dialogs.logOut(mContext); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } public void updateToolbarText(ToolbarTextBO toolbarTextBO){ mToolbar.setTitle(""); mToolbar.setSubtitle(""); if(toolbarTextBO.getTitle() != null && !toolbarTextBO.getTitle().isEmpty()) mToolbar.setTitle(toolbarTextBO.getTitle()); if(toolbarTextBO.getDescription() != null && !toolbarTextBO.getDescription().isEmpty()) mToolbar.setSubtitle(toolbarTextBO.getDescription());*/ } @Override public void onPostCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onPostCreate(savedInstanceState, persistentState); // Sync the toggle state after onRestoreInstanceState has occurred. toggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); toggle.onConfigurationChanged(newConfig); }}