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

时间:2020-02-14 01:21:17

标签: xamarin.android

我是移动开发的新手

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

1 个答案:

答案 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);
    }

当我单击“后退”按钮时,我切换了三个片段。它切换到第一个片段。 enter image description here

更新

您是否想获得以下结果:单击HomePage后单击后退按钮然后返回桌面?

enter image description here

这是代码。

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);

    }