0

我下面this答案在SO,這是名爲爲:抽屜式導航欄刷新

變化NavigationView項目時,用戶登錄

代碼工作正常,但NavigationView變化的內容,當我重新啓動應用程序。我想要的內容被改變後,我點擊登錄或註銷item menus

這是我在onCreate()方法代碼:

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.addDrawerListener(toggle); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 

     if(islogin()) 
     { 
      navigationView.getMenu().clear(); 
      navigationView.inflateMenu(R.menu.activity_main_drawer1); 
     } else 
     { 
      navigationView.getMenu().clear(); 
      navigationView.inflateMenu(R.menu.activity_main_drawer2); 
     } 
     navigationView.setNavigationItemSelectedListener(this); 
     toggle.syncState(); 

這裏是islogin()方法:

public boolean islogin(){ 
// Retrieve data from preference: 
     prefs = getSharedPreferences("UserLoginData", MODE_PRIVATE); 
     String username = prefs.getString("username", null); 
     if (username == null) { 
      return false; 
     } 
     else{ 
      return true; 
     } 
    } 

任何幫助將不勝感激!謝謝

注:雖然這個問題似乎重複了一些,但它只是標題,內容完全不同。

回答

0

雖然我沒有得到答案,但我在這裏發佈我的解決方案。 我確實解決了它非常簡單的邏輯,它的工作非常棒。

步驟1:

我第一初始化Toolbar toolbar;全局上面的類。

第2步:

然後我創建一個名爲簡單的方法:myDrawer()和包裹裏面我所有的抽屜代碼。就像這樣:

public void myDrawer(){ 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.addDrawerListener(toggle); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 

    if(islogin()) 
    { 
     navigationView.getMenu().clear(); 
     navigationView.inflateMenu(R.menu.activity_main_drawer2); 
    } else 
    { 
     navigationView.getMenu().clear(); 
     navigationView.inflateMenu(R.menu.activity_main_drawer); 
    } 
    navigationView.setNavigationItemSelectedListener(this); 
    toggle.syncState(); 

} 

現在我的手在導航,我可以用它做任何事情,比如刷新和重新調用等

第3步:

我打電話的方法在主要活動即:OnCreate

myDrawer(); 

步驟4:

我每次做邏輯SigninSignOut時都會打電話給我。

哇!它的工作就像一個魅力。

PS:只是爲了信息的目的,這是我的onNavigationItemSelected,在那裏我可以處理點擊事件:

public boolean onNavigationItemSelected(MenuItem item) { 

     int id = item.getItemId(); 
     Intent intent; 
     if (id == R.id.nav_item_item1) { 

      intent = new Intent(MainActivity.this, SomeClass1.class); 
      startActivity(intent); 

     } else if (id == R.id.nav_item_item2) { 
      intent = new Intent(getApplicationContext(), SomeClass2.class); 
      startActivity(intent); 

     } else if (id == R.id.nav_item_logout) { 
      // my other logic for signout 
       myDrawer(); 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

學分:

User: manish jain Answer