2017-03-08 67 views
2

在我bottomNavigationView我可以programmaticaly改变我的菜单项的一切似乎工作,但其实我的布局是从,如果被选中或diferent如果我直接点击选项卡。请看差异吼叫:的Android BottomNavigationView菜单项集检查不能正常工作

1)menuItem.setChecked(true)

enter image description here

2)当用户直接点击图标将执行动画,并显示在正确的

enter image description here

那么什么我真正想要的是选择菜单项,就好像用户点击。不应该通过做menuItem.setChecked(true)来工作?

请考虑以下定义布局菜单项:

<item android:id="@+id/menu_home" 
    android:title="@string/menu_home" 
    android:icon="@drawable/ic_home_black_24dp" 
    app:showAsAction="ifRoom" /> 

<item android:id="@+id/menu_hall_of_fame" 
    android:title="@string/menu_hall_of_fame" 
    android:icon="@drawable/ic_stars_black_24dp" 
    app:showAsAction="ifRoom" /> 

<item android:id="@+id/menu_info" 
    android:title="@string/menu_info" 
    android:icon="@drawable/ic_info_black_24dp" 
    app:showAsAction="ifRoom" /> 

<item android:id="@+id/menu_settings" 
    android:title="@string/menu_settings" 
    android:icon="@drawable/ic_settings_black_24dp" 
    app:showAsAction="ifRoom" /> 

,以及如何我检查了正确的菜单项:

MenuItem item = mBottomNav.getMenu().findItem(R.id.menu_about); 

    // update selected item 
    mSelectedItem = item.getItemId(); 

    // uncheck the other items and select the one. 
    for (int i = 0; i< mBottomNav.getMenu().size(); i++) { 
     MenuItem menuItem = mBottomNav.getMenu().getItem(i); 
     menuItem.setChecked(menuItem.getItemId() == mSelectedItem); 


    } 

还有就是要执行另一种方法menuItem的选择?我在这里错过了什么?

回答

1

看到这个我在这里发布的所有代码

public class MainActivity extends AppCompatActivity { 
private static final String SELECTED_ITEM = "arg_selected_item"; 

private BottomNavigationView mBottomNav; 
private int mSelectedItem; 

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

    mBottomNav = (BottomNavigationView) findViewById(R.id.navigation); 
    mBottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      selectFragment(item); 
      return true; 
     } 
    }); 

    MenuItem selectedItem; 
    if (savedInstanceState != null) { 
     mSelectedItem = savedInstanceState.getInt(SELECTED_ITEM, 0); 
     selectedItem = mBottomNav.getMenu().findItem(mSelectedItem); 
    } else { 
     selectedItem = mBottomNav.getMenu().getItem(0); 
    } 
    selectFragment(selectedItem); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putInt(SELECTED_ITEM, mSelectedItem); 
    super.onSaveInstanceState(outState); 
} 

@Override 
public void onBackPressed() { 
    MenuItem homeItem = mBottomNav.getMenu().getItem(0); 
    if (mSelectedItem != homeItem.getItemId()) { 
     // select home item 
     selectFragment(homeItem); 
    } else { 
     super.onBackPressed(); 
    } 
} 

private void selectFragment(MenuItem item) { 
    Fragment frag = null; 
    // init corresponding fragment 
    switch (item.getItemId()) { 
     case R.id.menu_home: 
      frag = MenuFragment.newInstance(getString(R.string.text_home), 
        getColorFromRes(R.color.color_home)); 
      break; 
     case R.id.menu_notifications: 
      frag = MenuFragment.newInstance(getString(R.string.text_notifications), 
        getColorFromRes(R.color.color_notifications)); 
      break; 
     case R.id.menu_search: 
      frag = MenuFragment.newInstance(getString(R.string.text_search), 
        getColorFromRes(R.color.color_search)); 
      break; 
    } 

    // update selected item 
    mSelectedItem = item.getItemId(); 

    // uncheck the other items. 
    Menu menu = mBottomNav.getMenu(); 
    for (int i = 0, size = menu.size(); i < size; i++) { 
     MenuItem menuItem = menu.getItem(i); 
     ((MenuItemImpl) menuItem).setExclusiveCheckable(false); 
     menuItem.setChecked(menuItem.getItemId() == R.id.menu_home); 
     ((MenuItemImpl) menuItem).setExclusiveCheckable(true); 
    } 

    updateToolbarText(item.getTitle()); 

    if (frag != null) { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(R.id.container, frag, frag.getTag()); 
     ft.commit(); 
    } 
} 

private void updateToolbarText(CharSequence text) { 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.setTitle(text); 
    } 
} 

private int getColorFromRes(@ColorRes int resId) { 
    return ContextCompat.getColor(this, resId); 
} 

}

您可以使用此代码

Menu menu = mBottomNav.getMenu(); 
    for (int i = 0, size = menu.size(); i < size; i++) { 
     MenuItem menuItem = menu.getItem(i); 
     ((MenuItemImpl) menuItem).setExclusiveCheckable(false); 
     menuItem.setChecked(menuItem.getItemId() == R.id.menu_home); 
     ((MenuItemImpl) menuItem).setExclusiveCheckable(true); 
    } 
+0

sauib,你是用什么'你MenuItemImpl'可以解释一点关于这个代码.. – ePascoal