Created
August 8, 2017 02:56
-
-
Save anandwana001/9f4bb4ef16394e030b785da1950b8be8 to your computer and use it in GitHub Desktop.
Navigation Drawer, Toggling fragments
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MainActivity extends AppCompatActivity | |
implements NavigationView.OnNavigationItemSelectedListener { | |
@BindView(R.id.toolbar) | |
Toolbar toolbar; | |
@BindView(R.id.nav_view) | |
NavigationView navigationView; | |
@BindView(R.id.drawer_layout) | |
DrawerLayout drawer; | |
// tags used to attach the fragments | |
public static final String TAG_CHAR = "characters"; | |
public static final String TAG_CO = "comics"; | |
public static final String TAG_EV = "events"; | |
public static final String TAG_AB = "about"; | |
public static String CURRENT_TAG = TAG_CHAR; | |
// index to identify current nav menu item | |
public static int navItemIndex = 0; | |
public Fragment fragment; | |
private Fragment sendFragment; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
ButterKnife.bind(this); | |
setSupportActionBar(toolbar); | |
if (savedInstanceState != null) { | |
fragment = getSupportFragmentManager().getFragment(savedInstanceState, "myFragmentName"); | |
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); | |
fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, | |
android.R.anim.fade_out); | |
fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG); | |
fragmentTransaction.commit(); | |
} else { | |
navItemIndex = 0; | |
CURRENT_TAG = TAG_CHAR; | |
loadHomeFragment(); | |
} | |
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); | |
drawer.setDrawerListener(toggle); | |
toggle.syncState(); | |
navigationView.setNavigationItemSelectedListener(this); | |
} | |
private void loadHomeFragment() { | |
selectNavMenu(); | |
if (getSupportFragmentManager().findFragmentByTag(CURRENT_TAG) != null) { | |
drawer.closeDrawers(); | |
return; | |
} else { | |
fragment = getHomeFragment(); | |
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); | |
fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, | |
android.R.anim.fade_out); | |
fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG); | |
fragmentTransaction.commit(); | |
drawer.closeDrawers(); | |
} | |
} | |
private Fragment getHomeFragment() { | |
switch (navItemIndex) { | |
case 0: | |
sendFragment = new CharacterFragment(); | |
break; | |
case 1: | |
sendFragment = new ComicFragment(); | |
break; | |
case 2: | |
sendFragment = new EventFragment(); | |
break; | |
case 3: | |
sendFragment = new AboutFragment(); | |
break; | |
default: | |
sendFragment = new CharacterFragment(); | |
} | |
return sendFragment; | |
} | |
private void selectNavMenu() { | |
navigationView.getMenu().getItem(navItemIndex).setChecked(true); | |
} | |
@Override | |
public void onBackPressed() { | |
if (drawer.isDrawerOpen(GravityCompat.START)) { | |
drawer.closeDrawer(GravityCompat.START); | |
return; | |
} | |
super.onBackPressed(); | |
} | |
@SuppressWarnings("StatementWithEmptyBody") | |
@Override | |
public boolean onNavigationItemSelected(MenuItem menuItem) { | |
switch (menuItem.getItemId()) { | |
case R.id.nav_char: | |
navItemIndex = 0; | |
CURRENT_TAG = TAG_CHAR; | |
break; | |
case R.id.nav_com: | |
navItemIndex = 1; | |
CURRENT_TAG = TAG_CO; | |
break; | |
case R.id.nav_ev: | |
navItemIndex = 2; | |
CURRENT_TAG = TAG_EV; | |
break; | |
case R.id.nav_about_us: | |
navItemIndex = 3; | |
CURRENT_TAG = TAG_AB; | |
break; | |
default: | |
navItemIndex = 0; | |
} | |
if (menuItem.isChecked()) { | |
menuItem.setChecked(false); | |
} else { | |
menuItem.setChecked(true); | |
} | |
menuItem.setChecked(true); | |
loadHomeFragment(); | |
return true; | |
} | |
@Override | |
protected void onSaveInstanceState(Bundle outState) { | |
super.onSaveInstanceState(outState); | |
getSupportFragmentManager().putFragment(outState, "myFragmentName", fragment); | |
} | |
@Override | |
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) { | |
super.onRestoreInstanceState(savedInstanceState, persistentState); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment