2017-02-18 5 views
0

Ich habe ein Problem in Android. Wenn ich versuche, das erste Element beim Start auszuwählen, und wähle ein anderes Element als das erste Element, so dass ich zwei Elemente ausgewählt habe. Das ist mein Code. Ich habe navigationView.getMenu(). PerformIdentifierAction (R.id.menu_program, 0) hinzugefügt, um das erste Element auszuwählen, aber ich denke, dass das Problem daraus kommt (ich weiß es nicht).Android-Stil zwei Elemente ausgewählt

Dank
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

haben Sie versucht, in Ihrem menu.xml? – siva35

+0

ya, wie ich unten sage, das Problem ist gelöst, aber jetzt, wenn ich versuche zu drehen, wird das erste Element nicht überprüft. cos die onCreate wird aufgerufen und savedInstance ist nicht null –

Antwort

0

Wenn Sie item.setChecked (true) tun, haben Sie vorherige zu deaktivieren. deklarieren eine außerhalb Funktionen MenuItem menuItem und ersetzen Sie Ihre item.setChecked (true) mit folgenden Code:

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

Danke, aber ich habe ein anderes Problem. Wenn ich versuche, in der Landschaft zu rotieren, wird das erste Objekt nicht geprüft. –

Verwandte Themen