Reputation: 11
I am creating my first android application. After doing required homework I bring here for help.
Fragment A can be invoked from Navigation Drawer. Again if i slide Navigation Bar and invoke Fragment A. its overlapping perviously Invoked Fragment A. Problem is User have to click back twice to get to home screen.
I sharing few screenshot and snippet.
Launching Fragment A(Help_Fragment())
private void createHelp() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Log.d(taglaunch, "Switching to Help Fragment");
Fragment fragment = new Help_Fragment();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,
R.animator.slide_out_right, R.animator.exit_to_left, R.animator.exit_to_right);
fragmentTransaction.replace(R.id.app_bar, fragment).addToBackStack(null).commit();
}
Oncreate
protected void onCreate(Bundle savedInstanceState) {
Log.d(taglaunch, "on Create - AppDrawer");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_appdrawer);
mainActivityAdapter = new MainActivityAdapter(getFragmentManager());
navigate();
switchtofragment();
getFragmentManager().addOnBackStackChangedListener(backStackListener);
}
public void switchtofragment() {
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("TAB1"));
tabLayout.addTab(tabLayout.newTab().setText("TAB2"));
viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setAdapter(mainActivityAdapter);
tabLayout.setOnTabSelectedListener(this);
tabLayout.setupWithViewPager(viewPager);
}
public void navigate() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
Upvotes: 1
Views: 1539
Reputation: 2172
If fragment exists, You can replace the fragment using the below code.
public void loadFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, fragment);
transaction.commitAllowingStateLoss();
}
Upvotes: 1
Reputation: 528
You can instead check if the Help_Fragment already exists by using findFragmentByTag() method of Fragment Manager. If it does not exist, then you can proceed to create one. Apart from that, replace method replaces fragment that was added programatically i.e. to a container like a frame layout. But this solution can be just a work around. Try this out and let us know. :)
Code :-
FragmentManager manager=getSupportFragmentManager();
Help_Fragment fragment1= (Help_Fragment) manager.findFragmentByTag("Help_Fragment");
if(fragment1==null)
{
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Log.d(taglaunch, "Switching to Help Fragment");
Fragment fragment = new Help_Fragment();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,
R.animator.slide_out_right, R.animator.exit_to_left, R.animator.exit_to_right);
fragmentTransaction.replace(R.id.app_bar, fragment,"Help_Fragment").addToBackStack(null).commit();
}
else{
// Display a Toast that fragment exists
}
Upvotes: 0