2017-02-18 4 views
0

アンドロイドに問題があります。起動時に最初の項目を選択しようとすると、最初の項目以外の項目が選択されるので、2つの項目が選択されています。これは私のコードです。私はnavigationView.getMenu()。performIdentifierAction(R.id.menu_program、0)を追加して最初の項目を選択しましたが、問題はこの(私は知らない)から来ると思います。おかげAndroidスタイルの2つのアイテムが選択されました

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

ya、私は問題が解決されたが、私は最初の項目を回転しようとすると今すぐチェックされていないと言うように。 onCreateが呼び出され、savedInstanceがnullではないからです。 –

答えて

0

あなたは(真)item.setCheckedを行っている、あなたは、以前のもののチェックを外す必要があります。 のMenuItem menuItemは外の関数を宣言し、次のコードで(真)あなたのitem.setCheckedを置き換える:

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

ありがとうございますが、私は他の問題を抱えています。私がランドスケープで回転しようとすると、最初の項目はチェックされません。 –

関連する問題