0
私は2つのメニューと2つのheaderViewでナビゲーションビューを使用しています。 ユーザーがアプリに入力すると、navigationViewはmenu + headerの最初のセットを表示します。ユーザーがログオンすると、2番目のセットが膨らみます。ユーザーがログアウトすると、最初のセットが再び表示されます。NavigationView、headerViewとMenuを置き換えます。
私はしばらく検索していましたが、次のコードを設定しました。私はフェーズの間に問題はありません: "サインインへのアプリケーションでの入力"しかし、SignOutナビゲーションビューはまだ新しいヘッダーに前のヘッダーを表示します。私はメニューに問題はありません。 お手伝いをしていただきありがとうございます。
public class MainActivity : ActivityBase
{
private Android.Support.V7.Widget.Toolbar toolbar;
private DrawerLayout drawerLayout;
private FrameLayout contentLayout;
private NavigationView navigationView;
private ActionBarDrawerToggle actionBarDrawerToggle;
private bool isAuthenticated = true; //******
public MainActivity() : base(Resource.Layout.activity_main) { }
#region Methods
protected override void InitViews()
{
Typeface fontArialFont = Typeface.CreateFromAsset(Assets, AppInfo.ArialFontPath);
toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout);
navigationView = FindViewById<NavigationView>(Resource.Id.navigationView);
contentLayout = FindViewById<FrameLayout>(Resource.Id.contentLayout);
// Set the toolbar and drawerLayout
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, Resource.String.open_drawer, Resource.String.close_drawer);
drawerLayout.AddDrawerListener(actionBarDrawerToggle);
SetSupportActionBar(toolbar);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayShowTitleEnabled(false);
actionBarDrawerToggle.SyncState();
// Set the NavigationView
LoadNavigationView(isAuthenticated);
navigationView.NavigationItemSelected += NavigationView_NavigationItemSelected;
//PrepareDrawer();
//Load FragmentMain
LoadFragmentToActivity(new MainFragment(), null);
}
private void NavigationView_NavigationItemSelected(object sender, NavigationView.NavigationItemSelectedEventArgs e)
{
switch (e.MenuItem.ItemId)
{
case (Resource.Id.nav_sign_in):
isAuthenticated = true;
LoadNavigationView(isAuthenticated);
break;
case (Resource.Id.nav_sign_out):
Toast.MakeText(this, "Sign out selected!", ToastLength.Short).Show();
isAuthenticated = false;
LoadNavigationView(isAuthenticated);
break;
}
//close drawer
drawerLayout.CloseDrawers();
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
if (actionBarDrawerToggle.OnOptionsItemSelected(item))
return true;
return base.OnOptionsItemSelected(item);
}
public void LoadNavigationView(bool isAuthenticated)
{
RelativeLayout afterloginHeaderView = FindViewById<RelativeLayout>(Resource.Id.afterloginHeaderView);
RelativeLayout preloginHeaderView = FindViewById<RelativeLayout>(Resource.Id.preloginHeaderView);
if (isAuthenticated)
{
navigationView.RemoveHeaderView(preloginHeaderView);
navigationView.InflateHeaderView(Resource.Layout.layout_nav_header_afterlogin);
navigationView.Menu.Clear();
navigationView.InflateMenu(Resource.Menu.menu_afterlogin);
}
else
{
navigationView.RemoveHeaderView(afterloginHeaderView);
navigationView.InflateHeaderView(Resource.Layout.layout_nav_header_prelogin);
navigationView.Menu.Clear();
navigationView.InflateMenu(Resource.Menu.menu_prelogin);
}
}
}
}