【发布时间】:2017-07-15 22:50:35
【问题描述】:
我正在尝试使用与 Gmail 应用程序完全相同的片段编写带有工具栏导航的应用程序:您有一个显示为“汉堡包”按钮的抽屉切换,当您单击邮件时,汉堡包会转换为后退按钮,反之亦然。
到目前为止,我已经能够实现非常接近我想要的东西,除了切换按钮不是从汉堡包到后退箭头的“动画”。
我所做的是在 mainActivity 中为 BackStack 绑定一个监听器:
SupportFragmentManager.AddOnBackStackChangedListener(this);
然后我可以从 Fragment A 加载 Fragment B 并将其添加到 Back Stack:
ResultFragment fragment = new ResultFragment();
this.Activity.SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.main_fragment, fragment)
.AddToBackStack("results")
.Commit();
在 Main Activity 中,Listener 检查 Backstack,如果不为空,它将汉堡包切换到后退按钮:
bool canGoBack = SupportFragmentManager.BackStackEntryCount > 0;
if (canGoBack)
{
//Showing Back Button
if (!_toolbarNavigationListererSet)
{
drawerToggle.DrawerIndicatorEnabled = false;
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
BackHandler backHandler = new BackHandler(this);
drawerToggle.ToolbarNavigationClickListener = backHandler;
_toolbarNavigationListererSet = true;
}
}
else
{
//Show the hamburger
SupportActionBar.SetDisplayHomeAsUpEnabled(false);
drawerToggle.DrawerIndicatorEnabled = true;
drawerToggle.ToolbarNavigationClickListener = null;
_toolbarNavigationListererSet = false;
}
drawerToggle.ToolbarNavigationClickListener 改变后退按钮的行为来调用后退按钮按下事件,如:
Activity.OnBackPressed();
仅此而已。
我知道这样做会隐藏汉堡包并显示后退按钮,反之亦然,所以我确定这就是我看不到动画的原因。
我错过了什么?感谢您的帮助。
附:代码是用 C# 编写的,因为我使用的是 Xamarin.Android,但 Java 代码和/或 Android 本机代码被广泛接受作为建议。
【问题讨论】:
标签: android android-fragments xamarin xamarin.android material-design