FragmentStateManager
An Android library that holds fragment states for bottom navigation view even when activity rotates.
Install / Use
/learn @okaybroda/FragmentStateManagerREADME
FragmentStateManager
An Android library that holds fragment states for BottomNavigationView. Saves fragment back stack even after activity rotation. Implementation derived from FragmentStatePagerAdapter.
Installation
Add Jitpack to project level gradle file
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
Then add library to module level gradle file
dependencies {
compile 'com.github.okaybroda:FragmentStateManager:1.+'
}
Usage
Create a FragmentStateManager instance in the OnCreate function of your Activity
FragmentStateManager fragmentStateManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ... your code ...
FrameLayout content = findViewById(R.id.content);
fragmentStateManager = new FragmentStateManager(content, getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new MainFragment();
case 1:
return new SearchFragment();
case 2:
return new MeFragment();
}
}
};
}
To change current fragment, call
fragmentStateManager.changeFragment(0); // 0 is the index of the fragment
Integration with BottomNavigationView
Add item selected listener
navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int position = getNavPositionFromMenuItem(item);
if (position != -1) {
fragmentStateManager.changeFragment(getNavPositionFromMenuItem(item));
return true;
}
return false;
}
});
(Optional) Add item reselected listener. This will reset the fragment to it's original state
navigation.setOnNavigationItemReselectedListener(new BottomNavigationView.OnNavigationItemReselectedListener() {
@Override
public void onNavigationItemReselected(@NonNull MenuItem item) {
int position = getNavPositionFromMenuItem(item);
if (position != -1) {
fragmentStateManager.removeFragment(position);
fragmentStateManager.changeFragment(position);
}
}
});
Related Skills
node-connect
341.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.5kCommit, push, and open a PR
