片段内片段的后退按钮的奇怪行为

时间:2018-02-26 14:01:16

标签: xamarin.android

您好我有一个导航抽屉,并根据导航抽屉中的选择显示片段。我的大多数片段都有一个标签布局和视图寻呼机。并且出现了奇怪的行为,在其中一个标签中,我不得不再次根据用户行为切换片段,这是按预期工作的,但是当我按下后退按钮时,整个片段会弹出,而不是首先弹出子片段

这就是我从mainActivity

填充选项卡片段的方法
fragment = new EquipmentFragment();
SupportFragmentManager.BeginTransaction()
                        .Replace(Resource.Id.content_frame, fragment)
                        .AddToBackStack(null).Commit();

这就是我设置tabLayout和viewPager

的方法
TabLayout tabLayout = view.FindViewById<TabLayout>(Resource.Id.tab_layout);
_viewpager = view.FindViewById<ViewPager>(Resource.Id.viewpager);
SetupViewPager(_viewpager);
tabLayout.SetupWithViewPager(_viewpager);

这就是我在我的一个标签中切换片段的方式

 FragmentTransaction transaction = FragmentManager.BeginTransaction();
 transaction.AddToBackStack(null);
 transaction.Add(Resource.Id.fragmentContainer, fragment);
 transaction.Commit();

但按下后退按钮会导致弹出整个tabbedFragment而不是首先弹出的子项目

1 个答案:

答案 0 :(得分:0)

您可以覆盖&#34; OnBackPressed&#34;和#34; OnOptionsItemSelected&#34;并检查,在这里你需要处理后退导航 - 确定是从ChildFragmentManager,FragmentManager弹出还是完成活动。

看起来像这样:

    public override void OnBackPressed()
    {
        var didPopFromFragment = TryPopFromFragment();
        if (didPopFromFragment == false)
        {
            Finish();
        }
    }

    public override bool OnOptionsItemSelected(IMenuItem item)
    {
        switch (item.ItemId)
        {
            case Android.Resource.Id.Home:
                var didPopFromFragment = TryPopFromFragment();
                if (didPopFromFragment)
                {
                    return true;
                }

                break;
        }

        return false;
    }

    private bool TryPopFromFragment()
    {
        var hasChildFragments = yourFragment.ChildFragmentManager.BackStackEntryCount > 0;
        if (hasChildFragments)
        {
            yourFragment.ChildFragmentManager.PopBackStack();
        }

        return hasChildFragments;
    }

...希望它有所帮助。