Xamarin.android 按下后退按钮时如何显示第一个片段?

Xamarin.android 按下后退按钮时如何显示第一个片段?,xamarin.android,Xamarin.android,我对手机开发还不熟悉 我目前正在从Xamarin Android开发一个电话目录应用程序,在这个应用程序中,我有4个片段(HomeFragment、AboutFragment、DirectoryFragment和SyncFragment) HomeFragment是应用程序中显示的第一个片段。当我单击侧栏中的项目About,然后按下后退按钮时,它工作得很好,因为我在主活动中的提交()之前使用了

我对手机开发还不熟悉

我目前正在从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);
    }

您是否尝试过Pop
backbackbackinclusive
标志?是否使用
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);

    }