【发布时间】:2017-01-18 17:17:19
【问题描述】:
注意:我正在使用 Xamarin - 但会接受 Java Android 中的答案 -
我有一个 android 应用程序,其中的导航与 gmail android 应用程序类似。
我有一个左抽屉导航。有以下选项
- 资产(如 gmail 应用程序收件箱片段)-
当用户启动应用程序时,默认情况下会显示此片段 - 当用户在此 Activity 上并按下后退按钮时,应用程序应关闭
- 地理围栏
当用户在这个片段上并按下它应该返回到资产(收件箱)片段
- 通知
当用户在这个片段上并按下它应该返回到资产(收件箱)片段
这就是我在 Activity 中启动默认片段的方式
protected override void OnCreate(Bundle savedInstanceState)
{
// Set the initial fragment i.e. AssetListFragment
var fragment = new AssetListFragment();
var ft = SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.content_frame, fragment);
ft.Commit();
}
然后当点击抽屉导航中的一个项目时,我会启动片段,如下所示:
private void NavigationDrawerItemSelected(object sender, NavigationView.NavigationItemSelectedEventArgs e)
{
Android.Support.V4.App.Fragment fragment = null;
switch (e.MenuItem.ItemId)
{
case Resource.Id.nav_assets:
fragment = new AssetListFragment();
break;
case Resource.Id.nav_geofences:
fragment = new GeofenceFragment();
break;
case Resource.Id.nav_notifications:
fragment = new NotificationsFragment();
break;
}
if (fragment != null)
{
var fragmentName = fragment.GetType().Name;
var fragmentPopped = SupportFragmentManager.PopBackStackImmediate(fragmentName, 0);
if (!fragmentPopped)
{
var ft = SupportFragmentManager
.BeginTransaction()
.AddToBackStack(fragmentName)
.Replace(Resource.Id.content_frame, fragment);
ft.Commit();
}
}
// Close drawer
_drawerLayout.CloseDrawers();
}
当用户点击后退按钮时,我做了以下操作:
public override void OnBackPressed()
{
if (_drawerLayout != null && _drawerLayout.IsDrawerOpen(GravityCompat.Start))
_drawerLayout.CloseDrawers();
else
{
if (SupportFragmentManager.BackStackEntryCount > 0)
SupportFragmentManager.PopBackStackImmediate();
else
base.OnBackPressed();
}
}
我需要做的是总是回到第一个屏幕(在我的情况下是 AssetListFragment)(在 gmail android 应用程序中是收件箱片段)
我该怎么做?目前从 Navigation Draw 加载的所有片段都已添加到堆栈中,当我单击“后退”按钮时,它会转到上一个片段而不是第一个片段。
【问题讨论】:
标签: android android-fragments xamarin xamarin.android