Skip to content

Instantly share code, notes, and snippets.

@anandwana001
Created August 8, 2017 02:56
Show Gist options
  • Save anandwana001/9f4bb4ef16394e030b785da1950b8be8 to your computer and use it in GitHub Desktop.
Save anandwana001/9f4bb4ef16394e030b785da1950b8be8 to your computer and use it in GitHub Desktop.
Navigation Drawer, Toggling fragments
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