2016-02-24 52 views
0

我試圖根據變量的值顯示和隱藏導航抽屜菜單項。我的課的開始是這樣的:Android檢查值和重繪菜單

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    public boolean subCreated = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     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.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     Menu navMenu = navigationView.getMenu(); 
     navigationView.setNavigationItemSelectedListener(this); 

     //Highlight the MainActivity (as default) on start 
     navigationView.setCheckedItem(R.id.nav_new); 

     //Hide participant specific menu items 
     if(subCreated == false){ 
      navMenu.findItem(R.id.nav_start).setVisible(false); 
      navMenu.findItem(R.id.nav_delete).setVisible(false); 
     } else { 
      navMenu.findItem(R.id.nav_start).setVisible(true); 
      navMenu.findItem(R.id.nav_delete).setVisible(true); 
     } 

    } 
... 

subCreated最初設置爲false,應用程序啓動。在onCreate方法中,我正在檢查subCreated的值。如果爲false,則隱藏2個菜單項,否則顯示它們。

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     switch (id) { 
      case R.id.nav_new: 
       subCreated = true; 
       break; 
... 

最初隱藏菜單項不顯示,當用戶點擊菜單項:

當用戶選擇一個特定菜單項我設置的subCreated值。我猜測它是因爲該檢查僅在應用程序首次啓動時執行。什麼是正確的方法來檢查變量的值,然後根據值執行一個操作(顯示一個菜單項)?

我知道我只需在onNavigationItemSelected()內顯示/隱藏項目即可實現此功能。但我試圖用靜態/實例變量來實現這一點,因爲我將其視爲會話變量,我可以在其他方法中檢查其他(與菜單無關的)功能

回答

0

對您有所建議。的onCreate()

private void showSub(boolean flag) { 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    Menu navMenu = navigationView.getMenu(); 
    if (!flag) { 
     navMenu.findItem(R.id.nav_start).setVisible(false); 
     navMenu.findItem(R.id.nav_delete).setVisible(false); 
    } else { 
     navMenu.findItem(R.id.nav_start).setVisible(true); 
     navMenu.findItem(R.id.nav_delete).setVisible(true); 
    } 
} 

和:onNavigationItemSelected()

//Hide participant specific menu items 
    if(subCreated == false){ 
     showSub(false); 
    } else { 
     showSub(true); 
    } 

和:你可以嘗試的方法

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    switch (id) { 
     case R.id.nav_new: 
      subCreated = true; 
      showSub(true); 
      break; 
... 

希望能幫到你!

+0

我想過這樣做,但我之所以會問設置和檢查一個變量,是因爲我把它看作是一個會話變量,它貫穿整個會話,我可以用其他方法引用其他功能,如好。有沒有辦法在主類中設置靜態/實例變量呢? – Simon

+0

你想使用一個變量來控制顯示/隱藏項目菜單,並且想要保存這個變量在某個地方使用?如果爲true,則可以保存爲首選項,然後可以在任何地方獲取/更改此值。 – dolphin

+0

是的,這聽起來不錯。在這樣的導航菜單的上下文中實現首選項的代碼是什麼? – Simon