我是移动开发的新手
我目前正在从 Xamarin Android 开发一个电话目录应用,在这个应用中,我有4个片段(HomeFragment,AboutFragment,DirectoryFragment和SyncFragment)。
HomeFragment是应用程序显示的第一个片段。当我单击侧边栏中的项目关于然后按返回按钮时,效果很好,因为我在 AddToBackStack(null)
之前使用了 commit()
。
但是问题是,假设我打开应用程序,默认情况下显示 HomeFragment 拳头,当我导航到 AboutFragment 时,它显示 AboutPage ,然后如果我导航至 DirectoryFragment 接下来并单击“后退”按钮,我会继续返回到我想要的 AboutPage / AboutFragment 要达到的目的,应该回到 HomePage / HomeFragment
简而言之,我想要实现的功能类似于Gmail应用程序的导航行为。
无论如何,这是我在主要活动
中的代码switch (e.MenuItem.ItemId)
{
case (Resource.Id.nav_home):
FragmentTransaction ft = FragmentManager.BeginTransaction();
HomeFragment home = new HomeFragment();
ft.Replace(Resource.Id.HomeFrameLayout, home);
HideSoftKeyboard();
mDrawerLayout.AddDrawerListener(mDrawerToggle);
ft.AddToBackStack(null);
ft.Commit();
break;
case (Resource.Id.nav_about):
FragmentTransaction ft1 = FragmentManager.BeginTransaction();
AboutFragment about = new AboutFragment();
ft1.Replace(Resource.Id.HomeFrameLayout, about);
HideSoftKeyboard();
ft1.AddToBackStack(null);
ft1.Commit();
break;
case (Resource.Id.nav_etel):
FragmentTransaction ft2 = FragmentManager.BeginTransaction();
GHQFragment ghq = new DirectoryFragment();
ft2.Replace(Resource.Id.HomeFrameLayout, ghq);
HideSoftKeyboard();
ft2.AddToBackStack(null);
ft2.Commit();
break;
case (Resource.Id.nav_refresh):
if (CrossConnectivity.Current.IsConnected)
{
FragmentTransaction ft3 = FragmentManager.BeginTransaction();
SyncFragment sync = new SyncFragment();
ft3.Replace(Resource.Id.HomeFrameLayout, sync);
HideSoftKeyboard();
ft3.AddToBackStack(null);
ft3.Commit();
}
else
{
Toast.MakeText(this, "Please connect to the internet to sync records.", ToastLength.Long).Show();
}
break;
答案 0 :(得分:0)
您可以像下面的代码一样覆盖OnKeyDown
方法。
public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back)
{
FragmentManager fragmentManager = this.FragmentManager;
int count = fragmentManager.BackStackEntryCount;
for (int i = 0; i < count; ++i)
{
fragmentManager.PopBackStack();
}
// your code
return false;
}
return base.OnKeyDown(keyCode, e);
}
当我单击“后退”按钮时,我切换了三个片段。它切换到第一个片段。
更新
您是否想获得以下结果:单击HomePage
后单击后退按钮然后返回桌面?
这是代码。
public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back)
{
FragmentManager fragmentManager = this.FragmentManager;
int count = fragmentManager.BackStackEntryCount;
if(count>0){
for (int i = 0; i < count; ++i)
{
fragmentManager.PopBackStack();
}
return false;
}
}
return base.OnKeyDown(keyCode, e);
}