I have created one activity and 2 fragments. Fragment B is inside Fragment A. When I click on back button on my phone it doesn't go to Fragment A from Fragment B. But it crashes the app. I am maintaining a Stack.
public void ShowFragment(SupportFragment fragment)
{
if (fragment.IsVisible)
{
return;
}
Android.Support.V4.App.FragmentTransaction trans = SupportFragmentManager.BeginTransaction();
fragment.View.BringToFront();
trans.Hide(mCurrentFragment);
Console.WriteLine("Hiding fragemnt current " + mCurrentFragment.Tag+" fragment "+fragment.Tag);
trans.Show(fragment);
if (mStackFragments.Count != 0)
{
SupportFragment sf = mStackFragments.Pop();
if (fragment != sf)
{
mStackFragments.Push(sf);
mStackFragments.Push(fragment);
}
else
{
mStackFragments.Push(sf);
}
}
else
{
mStackFragments.Push(fragment);
}
mCurrentFragment = fragment;
trans.Commit();
LoadFragmentTitleTxtView();
LoadActionBarSpinner();
}
above method is used to show the fragment/main screen, whereas the following code is for OnBackPressed.
public override void OnBackPressed()
{
if (mDrawerLayout.IsDrawerOpen((int)GravityFlags.Left))
{
mDrawerLayout.CloseDrawer((int)GravityFlags.Left);
}
else
{
if (mStackFragments.Count > 1)
{
//mStackFragments.Pop();
Console.WriteLine("Popping 1st " + mStackFragments.Pop().Tag+" Count "+mStackFragments.Count);
SupportFragment frag = mStackFragments.Pop();
Console.WriteLine("Poppoing 2nd " + frag.Tag+" Count "+mStackFragments.Count);
if (frag == chaptersFragment)
{
if (chapterfiltertext != "")
{
item.ExpandActionView();
sssearchview.SetQuery(chapterfiltertext, false);
mainview.Animate().Alpha(1f).SetListener(null);
}
}
Console.WriteLine("In back method.. "+frag.Tag);
ShowFragment(frag);
}
else
{
Finish();
}
}
}
its working fine for the fragments which doesn't have any nested fragments within them.
This is the code for the nested fragment B to load it on main screen from fragment A.
FragmentTransaction tx = context.SupportFragmentManager.BeginTransaction();
FragmentB fragmentB = new FragmentB();
Bundle args = new Bundle();
args.PutString("letter", tmp1);
fragmentB.Arguments = args;
tx.Replace(Resource.Id.main, fragmentB, "innerDictFrag");
tx.AddToBackStack(null);
context.mStackFragments.Push(fragmentB);
tx.Commit();