2017-07-14 5 views
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); 

     } 
    } 
} 

}

答えて

0

私はこの方法で問題を解決するために管理。

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 
     { 
      View headerView = navigationView.GetHeaderView(0);    
      navigationView.RemoveHeaderView(headerView); 
      navigationView.InflateHeaderView(Resource.Layout.layout_nav_header_prelogin); 
      navigationView.Menu.Clear(); 
      navigationView.InflateMenu(Resource.Menu.menu_prelogin); 

     } 
関連する問題