2017-02-18 30 views
0

我在android中有一個問題。當我嘗試在啓動時選擇第一個項目,並選擇除第一個項目之外的其他項目,所以我選擇了兩個項目。這是我的代碼。我已經添加了navigationView.getMenu()。performIdentifierAction(R.id.menu_program,0)來選擇第一個項目,但我認爲問題來自於此(我不知道)。由於Android風格的兩項選擇

public class MainActivity extends AppCompatActivity { 

private DrawerLayout drawerLayout; 
private Toolbar toolbar; 
private NavigationView navigationView; 
private ActionBarDrawerToggle actionBarDrawerToggle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    actionBarDrawerToggle = setupActionBarDrawerToggle(); 
    drawerLayout.addDrawerListener(actionBarDrawerToggle); 
    actionBarDrawerToggle.syncState(); 

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

    setupNavigationViewContent(navigationView); 

    if (savedInstanceState == null) { 
     navigationView.getMenu().performIdentifierAction(R.id.menu_program, 0); 
    } 
} 

private ActionBarDrawerToggle setupActionBarDrawerToggle() { 
    return new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
} 

private void setupNavigationViewContent(NavigationView navigationView) { 

    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      selectNavigationViewItem(item); 
      return true; 
     } 
    }); 
} 

private void selectNavigationViewItem(MenuItem item) { 
    /*if (lastItem == null) { 
     lastItem = item; 
     item.setChecked(true); 
     Log.e("TAG", "selectNavigationViewItem: "+lastItem); 
    } else { 
     lastItem.setChecked(false); 
    }*/ 

    Fragment fragment = null; 
    Class fragmentClass; 

    switch (item.getItemId()) { 
     case R.id.menu_program: 
      fragmentClass = Fragment1.class; 
      break; 

     case R.id.menu_visitor: 
      fragmentClass = Fragment2.class; 
      break; 

     case R.id.menu_partner: 
      fragmentClass = Fragment3.class; 
      break; 

     case R.id.menu_about: 
      fragmentClass = Fragment4.class; 
      break; 

     case R.id.menu_team: 
      fragmentClass = Fragment5.class; 
      break; 

     case R.id.menu_contact: 
      fragmentClass = Fragment6.class; 
      break; 

     default: 
      fragmentClass = Fragment1.class; 
    } 

    try { 
     fragment = (Fragment) fragmentClass.newInstance(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.frame_layout_content, fragment).commit(); 

    item.setChecked(true); 
    setTitle(item.getTitle()); 

    drawerLayout.closeDrawers(); 
} 

@Override 
public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 
    super.onPostCreate(savedInstanceState, persistentState); 
    actionBarDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    actionBarDrawerToggle.onConfigurationChanged(newConfig); 
} 

}

+0

你試過<組機器人:checkableBehavior =「單」>您menu.xml文件裏面? – siva35

+0

雅,正如我下面說的問題已解決,但現在當我嘗試旋轉第一項不檢查。因爲onCreate被調用並savedInstance不爲空 –

回答

0

當你在做item.setChecked(真),您必須取消前一個。 聲明一個菜單項菜單項之外的功能,並與下面的代碼替換您的item.setChecked(真):

if(menuItem != null) 
    menuItem.setChecked(false); 
menuItem = item; 
menuItem.setChecked(true); 
+0

謝謝,但我有其他問題。當我嘗試在橫向旋轉時,第一項不被選中。 –