NavigationDrawer menuItem setChecked不起作用



我从Android支持的设计库中创建了一个带有NavigationDrawer的BaseActivity

public abstract class BaseActivity extends ActionBarActivity {  
final static int MENUITEMS = 5;
private Toolbar toolbar;                              // Declaring the Toolbar Object
NavigationView navigationView;
private DrawerLayout drawerLayout;
Context basecontext;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getLayoutId());
/* Assinging the toolbar object ot the view
and setting the the Action bar to our toolbar
 */
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //Initializing NavigationView
    //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        // This method will trigger on item Click of navigation menu
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {

            //Checking if the item is in checked state or not, if not make it in checked state
            if (menuItem.isChecked()) {
                menuItem.setChecked(false);
            } else {
                menuItem.setChecked(true);
                switch (menuItem.getItemId()) {

                    //Replacing the main content with ContentFragment Which is our Inbox View;
                    case R.id.menu_start:
                        Toast.makeText(getApplicationContext(), "Noch nicht implementiert", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(BaseActivity.this, Start.class);
                        startActivity(intent);
                        // For rest of the options we just show a toast on click
                        //TODO
                    case R.id.menu_all_entries:
                        Toast.makeText(getApplicationContext(), "Noch nicht implementiert", Toast.LENGTH_SHORT).show();
                    case R.id.menu_missed_entries:
                        Toast.makeText(getApplicationContext(), "Noch nicht implementiert", Toast.LENGTH_SHORT).show();
                    case R.id.menu_diagram:
                        Toast.makeText(getApplicationContext(), "Noch nicht implementiert", Toast.LENGTH_SHORT).show();
                    case R.id.menu_export:
                        Toast.makeText(getApplicationContext(), "Noch nicht implementiert", Toast.LENGTH_SHORT).show();
                    default:
                        Toast.makeText(getApplicationContext(), "Somethings Wrong", Toast.LENGTH_SHORT).show();
                }
            }
            //Closing drawer on item click
            drawerLayout.closeDrawers();
            //String localClassName = getLocalClassName();
            //Check to see which item was being clicked and perform appropriate action
            return true;
        }
    });

运行正常

现在我有一个"子"活动(没有任何东西表示为菜单项)。

在此活动中:

public class AddEntryPage1 extends BaseActivity {

@Override
protected int getLayoutId(){
    return R.layout.activity_add_entry_page1;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ButterKnife.bind(this);
    for(int i=0;i<MENUITEMS;i++){
        navigationView.getMenu().getItem(0).setChecked(false);
    }
}
}

我尝试将所有菜单项设置为未选中,但没有任何反应。

当我计算表达式

navigationView.getMenu().getItem(0).isChecked()

总是为真(在前面和后面)for循环/getItem (0) .setChecked(假的)).

我也没有得到错误。

似乎我没有写权限?这是一个问题,我已经启动我的抽屉。xml与选定的项目?当我单击其他菜单项时,所选项目按预期更改。或者checkableBehavior="single"的意思是必须检查一个项目?

<group android:checkableBehavior="single">
    <item
        android:id="@+id/menu_start"
        android:checked="true"
        android:icon="@drawable/ic_action_home"
        android:title="Start" />
    <item
        android:id="@+id/menu_all_entries"
        android:checked="false"
        android:icon="@drawable/ic_action_view_list"
        android:title="Alle Einträge" />
    <item
        android:id="@+id/menu_missed_entries"
        android:checked="false"
        android:icon="@drawable/ic_action_view_list"
        android:title="Verpasste Einträge" />
    <item
        android:id="@+id/menu_diagram"
        android:checked="false"
        android:icon="@drawable/ic_editor_insert_chart"
        android:title="Diagramm" />

    <item
        android:id="@+id/menu_export"
        android:checked="false"
        android:icon="@drawable/ic_social_share"
        android:title="Export" />
</group>

谢谢你的帮助!

对于可能有同样问题的人:

我向Google报告了这个问题:https://code.google.com/p/android/issues/detail?id=184089

//The click listner for ListView in the navigation drawer
private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
         // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
    }
}

我找到原因了:

奇怪的

navigationView.getMenu().getItem(1).setChecked(false);

激活/检查条目

.setChecked(true) 

激活/检查它。

有人能复制这个吗?这可能是个bug吗?

如何:

尝试删除:

 android:checked="false"

如果有帮助的话我的代码是:

 navigationView = binding.navigationView;
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            drawerLayout.closeDrawers();
            int itemId = menuItem.getItemId();
            navigationView.getMenu().findItem(R.id.drawer_5_reasons).setChecked(true);
            return true;
        }
    });

最新更新