Instantly share code, notes, and snippets.
Created
April 17, 2018 10:31
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save jirevwe/048d7c762921e5801434222cee710c85 to your computer and use it in GitHub Desktop.
BottomBarNavigation code to retain fragment state
This file contains hidden or 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
package com.ouida.app.ui.home; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.support.annotation.NonNull; | |
import android.support.design.widget.BottomNavigationView; | |
import android.support.design.widget.CoordinatorLayout; | |
import android.support.v4.app.Fragment; | |
import android.support.v4.app.FragmentManager; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.widget.FrameLayout; | |
import com.ouida.app.R; | |
import com.ouida.app.ui.base.BaseActivity; | |
import com.ouida.app.ui.book_club.BookClubFragment; | |
import com.ouida.app.ui.my.MyBooksFragment; | |
import com.ouida.app.ui.profile.ProfileFragment; | |
import com.ouida.app.ui.rewards.RewardsFragment; | |
import com.ouida.app.ui.store.StoreFragment; | |
import com.ouida.app.utils.others.BottomNavigationViewBehavior; | |
import javax.inject.Inject; | |
import butterknife.BindView; | |
import butterknife.ButterKnife; | |
public class DashboardActivity extends BaseActivity implements DashboardMvpView, | |
BottomNavigationView.OnNavigationItemSelectedListener { | |
public static final String SELECTED_ITEM = "arg_selected_item"; | |
private static String MY_BOOKS = "my books"; | |
private static String PROFILE = "profile"; | |
private static String BOOK_CLUB = "book club"; | |
private static String STORE = "store"; | |
private static String REWARDS = "rewards"; | |
Fragment myBooksFragment; | |
Fragment storeFragment; | |
Fragment bookClubFragment; | |
Fragment rewardsFragment; | |
Fragment profileFragment; | |
@BindView(R.id.navigation) | |
BottomNavigationView mBottomNavigationView; | |
@BindView(R.id.container) | |
FrameLayout frameLayout; | |
@Inject | |
DashboardMvpContract<DashboardMvpView> mPresenter; | |
FragmentManager mFragmentManager = getSupportFragmentManager(); | |
Fragment mFragment; | |
private int mSelectedItem = 0; | |
@NonNull | |
public static Intent getStartIntent(Context context) { | |
return new Intent(context, DashboardActivity.class); | |
} | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_dashboard); | |
getActivityComponent().inject(this); | |
setUnBinder(ButterKnife.bind(this)); | |
mPresenter.onAttach(this); | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
switch (item.getItemId()) { | |
default: | |
break; | |
} | |
return false; | |
} | |
@Override | |
protected void setUp() { | |
mPresenter.onViewInitialized(); | |
myBooksFragment = MyBooksFragment.newInstance(); | |
storeFragment = StoreFragment.newInstance(); | |
bookClubFragment = BookClubFragment.newInstance(); | |
rewardsFragment = RewardsFragment.newInstance(); | |
profileFragment = ProfileFragment.newInstance(); | |
createFragments(); | |
mBottomNavigationView.setOnNavigationItemSelectedListener(this); | |
mSelectedItem = getIntent().getIntExtra(SELECTED_ITEM, 0); | |
MenuItem homeItem = mBottomNavigationView.getMenu().getItem(mSelectedItem); | |
selectFragment(homeItem); | |
mBottomNavigationView.setSelectedItemId(mSelectedItem); | |
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mBottomNavigationView.getLayoutParams(); | |
layoutParams.setBehavior(new BottomNavigationViewBehavior()); | |
} | |
@Override | |
public boolean onNavigationItemSelected(@NonNull MenuItem item) { | |
return selectFragment(item); | |
} | |
@Override | |
public void onBackPressed() { | |
MenuItem homeItem = mBottomNavigationView.getMenu().getItem(0); | |
if (mSelectedItem != homeItem.getItemId()) { | |
selectFragment(homeItem); | |
mBottomNavigationView.setSelectedItemId(0); | |
} else { | |
super.onBackPressed(); | |
} | |
} | |
@Override | |
protected void onSaveInstanceState(Bundle outState) { | |
outState.putInt(SELECTED_ITEM, mSelectedItem); | |
super.onSaveInstanceState(outState); | |
} | |
//Method to add and hide all of the fragments you need to. In my case I hide 4 fragments, while 1 is visible, that is the first one. | |
private void addHideFragment(Fragment fragment) { | |
mFragmentManager.beginTransaction().add(R.id.container, fragment).hide(fragment).commit(); | |
} | |
//Method to hide and show the fragment you need. It is called in the BottomBar click listener. | |
private Fragment hideShowFragment(Fragment hide, Fragment show) { | |
mFragmentManager.beginTransaction().hide(hide).show(show).commit(); | |
return show; | |
} | |
//Add all the fragments that need to be added and hidden. Also, add the one that is supposed to be the starting one, that one is not hidden. | |
private void createFragments() { | |
addHideFragment(bookClubFragment); | |
addHideFragment(rewardsFragment); | |
addHideFragment(storeFragment); | |
addHideFragment(profileFragment); | |
mFragmentManager.beginTransaction().add(R.id.container, myBooksFragment).commit(); | |
mFragment = myBooksFragment; | |
} | |
private boolean selectFragment(MenuItem item) { | |
if (mSelectedItem == item.getItemId()) { | |
return false; | |
} | |
switch (item.getItemId()) { | |
case R.id.navigation_my_books: | |
mFragment = hideShowFragment(mFragment, myBooksFragment); | |
break; | |
case R.id.navigation_store: | |
mFragment = hideShowFragment(mFragment, storeFragment); | |
break; | |
case R.id.navigation_book_club: | |
mFragment = hideShowFragment(mFragment, bookClubFragment); | |
break; | |
case R.id.navigation_rewards: | |
mFragment = hideShowFragment(mFragment, rewardsFragment); | |
break; | |
case R.id.navigation_profile: | |
mFragment = hideShowFragment(mFragment, profileFragment); | |
break; | |
} | |
mSelectedItem = item.getItemId(); | |
return true; | |
} | |
@Override | |
public void recyclerViewListClicked(View v, int position) { | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment