Xamarin.android 按下后退按钮时如何显示第一个片段?
我对手机开发还不熟悉 我目前正在从Xamarin Android开发一个电话目录应用程序,在这个应用程序中,我有4个片段(HomeFragment、AboutFragment、DirectoryFragment和SyncFragment) HomeFragment是应用程序中显示的第一个片段。当我单击侧栏中的项目About,然后按下后退按钮时,它工作得很好,因为我在主活动中的Xamarin.android 按下后退按钮时如何显示第一个片段?,xamarin.android,Xamarin.android,我对手机开发还不熟悉 我目前正在从Xamarin Android开发一个电话目录应用程序,在这个应用程序中,我有4个片段(HomeFragment、AboutFragment、DirectoryFragment和SyncFragment) HomeFragment是应用程序中显示的第一个片段。当我单击侧栏中的项目About,然后按下后退按钮时,它工作得很好,因为我在主活动中的提交()之前使用了
提交()之前使用了
但问题是,假设我打开应用程序,默认情况下它会显示HomeFragment拳头,当我导航到AboutFragment时,它会显示AboutPage,然后如果我导航到DirectoryFragment下一步并单击后退按钮,我继续回到AboutPage/AboutFragment,我想实现的是,它应该回到主页/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;
您可以像下面的代码一样覆盖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);
}
您是否尝试过Popbackbackbackinclusive
标志?是否使用DrawerLayout
和NavigationView
来实现此目的?如果使用FragmentTransaction
中的Replace
方法,它将删除所有已存在的片段。您是否实现了Back arrow的单击事件?什么是Pop Backback?根据上面给出的代码,我应该把它放在哪里?我已经按照你的代码操作了,但似乎我无法关闭应用程序now@ZippedLips我更新我的答案,你可以参考它。
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);
}