2017-02-18 1 views
0

J'ai un problème dans android. Lorsque j'essaie de sélectionner le premier élément au démarrage, et sélectionnez un autre élément sauf le premier élément, j'ai deux éléments sélectionnés. C'est mon code. J'ai ajouté navigationView.getMenu(). PerformIdentifierAction (R.id.menu_program, 0) pour sélectionner le premier élément mais je pense que le problème vient de ceci (je ne sais pas). MerciAndroid style deux éléments sélectionnés

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

avez-vous essayé dans votre menu.xml? – siva35

+0

ya, comme je le dis ci-dessous le problème est résolu mais maintenant quand j'essaye de faire pivoter le premier article n'est pas vérifié. cos le onCreate est appelé et savedInstance n'est pas nul –

Répondre

0

Lorsque vous faites item.setChecked (vrai), vous devez décocher précédente. Déclarer un MenuItem ligneMenu en dehors des fonctions et remplacer votre item.setChecked (true) avec le code suivant:

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

Merci mais j'ai un autre problème. Lorsque j'essaie de faire pivoter en mode paysage, le premier élément n'est pas vérifié. –