首页 > 解决方案 > 开关盒在菜单项上不起作用 - 为什么?

问题描述

我试图在单击菜单中的项目时执行操作,并且我使用 switch case 来循环项目 ID

我试图删除 break 并尝试使用代码不起作用,每次单击菜单中的任何项目时,它都会执行菜单中的最后一种方法,即注销

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.menu_all_users:
            // complete later

        case R.id.menu_account_setting:
            Intent settingIntent = new Intent(MainActivity.this, SettingActivity.class);
            startActivity(settingIntent);
            finish();

        case R.id.menu_log_out:
            auth.signOut();

            Intent loginIntent = new Intent(MainActivity.this , LoginActivity.class);
            loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(loginIntent);
            finish();

            default:
                break;
    }

    return super.onOptionsItemSelected(item);


}

标签: javaandroid

解决方案


为什么要删除 break 语句,请以这种方式尝试:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.menu_all_users:

        return true;
    case R.id.menu_account_setting:
        Intent settingIntent = new Intent(MainActivity.this, SettingActivity.class);
        startActivity(settingIntent);
        finish();
        return true;
    case R.id.menu_log_out:
        auth.signOut();

        Intent loginIntent = new Intent(MainActivity.this , LoginActivity.class);
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(loginIntent);
        finish();
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

还要交叉检查所有 id 是否存在于 xml 中,并且您在onCreateOptionsMenu方法中正确地膨胀了菜单。


推荐阅读