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

拉链唇

我是移动开发的新手

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

您可以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);

    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回时返回第一个片段

按下后退按钮时如何使片段替换为特定片段

用户滑动到第一个片段时如何烤面包

按下活动操作栏后退按钮时如何转到上一个选定的选项卡

AngularJS:即使不是提交按钮,表单中的第一个按钮也会在按下Enter按钮时触发

当按下后退按钮时重新启动片段类

按下按钮时,如何模拟按下的另一个按钮?

如何阻止下一个按钮显示第一个div?

单击第一个片段上的按钮,如何将消息从一个片段发送到另一个片段?

在选择组件中按下选项的第一个字母时,如何禁用对项目的选择?

在第一个按钮上按下状态未更新,但调用了功能

R闪亮:按下按钮时,应执行数据表中的多个updateSelectInput,但只有第一个被更新

如何制作按钮,当按下按钮时,该按钮会消失并显示一个新的div

如何在查看最后一个片段和第一个片段时使后退/下一个按钮不可见

如何隐藏第二个按钮并仅在按下第一个按钮时显示它?

如何通知一个活动在片段中按下了后退按钮?

iOS故事板:如何使用后退按钮选择第一个视图来选择第二个视图,但不显示第一个视图

每当我按下任何一个发布按钮时,列表中的第一个按钮都将被更新,而不是我按下的特定按钮

按下后退按钮时,addToBackStack()复制原始片段

如何验证上一个片段中按下的按钮

在片段上按下后退按钮时强制关闭

Android后退一个片段,当按下硬件后退按钮时会显示后退一个片段。

当我按下另一个按钮时,如何显示按下按钮的视觉效果?

检测到按下后退按钮后,如何将数据发送回第一个视图控制器?

活动与一个片段在后箭头按第一个活动是打开的

按后退按钮移动到上一个片段时显示空白屏幕

为什么当我按下 ENTER 键时触发表单中第一个按钮的 onclick(并且没有 keyCode 事件)?

如何在不按后退按钮和关闭按钮的情况下将数据从第二个活动传递到第一个(弹出窗口)?

在后退按钮上,如何在 XML 布局中定义的片段被另一个片段替换后显示