您好我有一个导航抽屉,并根据导航抽屉中的选择显示片段。我的大多数片段都有一个标签布局和视图寻呼机。并且出现了奇怪的行为,在其中一个标签中,我不得不再次根据用户行为切换片段,这是按预期工作的,但是当我按下后退按钮时,整个片段会弹出,而不是首先弹出子片段
这就是我从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而不是首先弹出的子项目
答案 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;
}
...希望它有所帮助。