android中R.id.XXXX的开关/外壳不工作

android中R.id.XXXX的开关/外壳不工作,android,switch-statement,Android,Switch Statement,我对这种类型的代码有问题 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_sign_out_all: doHardShutdown(); return true; case R.id.menu_add_account: // showExistingAccount

我对这种类型的代码有问题

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_sign_out_all:
        doHardShutdown();
        return true;
    case R.id.menu_add_account:
     //   showExistingAccountListDialog();
        return true;
    case R.id.menu_settings:
        Intent sintent = new Intent(this, SettingActivity.class);
        startActivityForResult(sintent,0);
        return true;
    case R.id.menu_import_keys:
        importKeyStore();
        return true;
   // case R.id.menu_exit:
  //      signOutAndKillProcess();

      //  return true;
    }
    return super.onOptionsItemSelected(item);
}
它发生在所有代码中,其中有一些开关/案例。 在每一天:

case R.id.XXX
eclipse返回一个错误:大小写表达式必须是常量表达式

然后我尝试删除R.java,清理并重新生成它,但没有成功。 我怎样才能修好它

这是xml的一部分:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto">
<item
        android:id="@+id/menu_add_account"
        android:title="@string/menu_add_account"
         android:icon="@android:drawable/ic_menu_add"
                 app:showAsAction="always|withText"
        >
</item>
要解决的代码如下所示 在final int中指定menuId,然后在switch case中使用它

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    final int menuId = item.getItemId();
    switch (menuId)
    {
    case R.id.menu_sign_out_all:
        doHardShutdown();
        return true;
    case R.id.menu_add_account:
        return true;
    case R.id.menu_settings:
        Intent sintent = new Intent(this, SettingActivity.class);
        startActivityForResult(sintent,0);
        return true;
    case R.id.menu_import_keys:
        importKeyStore();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

我遇到这个问题的原因如下:

In a regular Android project, constants in the resource R class are declared like this:
public static final int main=0x7f030004;

However, as of ADT 14, in a library project, they will be declared like this:
public static int main=0x7f030004;
解决这类问题的方法是将开关案例转换为if-else

更多信息,请访问:

原件:

解决方案


不起作用,它用R.id.menu_XXX标记开关盒,并带有相同的错误。eclipse给我的一个自动更正选项是use if else。。。。但不一定要用这种方式,嗯。。解决方案是将开关/机箱转换为if-else。。。我将补充我的回答当你使用开关盒时,总是尝试使用中断而不是返回。我知道@hareshchelana。。但是这个密码不是我的。。。我正试图清除所有的错误,并解决那些在创建时似乎没有发生的错误。。。。。有些地方很可怕s
switch (item.getItemId()) {
    case R.id.menu_sign_out_all:
        doHardShutdown();
        return true;
    case R.id.menu_add_account:
     //   showExistingAccountListDialog();
        return true;
    case R.id.menu_settings:
        Intent sintent = new Intent(this, SettingActivity.class);
        startActivityForResult(sintent,0);
        return true;
    case R.id.menu_import_keys:
        importKeyStore();
        return true;
    }
int itemId = item.getItemId();
        if (itemId == R.id.menu_invite_user) {
            Intent i = new Intent(ContactListActivity.this, AddContactActivity.class);
            i.putExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, mProviderId);
            i.putExtra(ImServiceConstants.EXTRA_INTENT_ACCOUNT_ID, mAccountId);
            i.putExtra(ImServiceConstants.EXTRA_INTENT_LIST_NAME,
                    mContactListView.getSelectedContactList());
            startActivity(i);
            return true;
        } else if (itemId == android.R.id.home || itemId == R.id.menu_view_accounts) {
            startActivity(new Intent(getBaseContext(), ChooseAccountActivity.class));
            // finish();
            return true;
        } else if (itemId == R.id.menu_settings) {
            Intent sintent = new Intent(this, SettingActivity.class);
            startActivity(sintent);
            return true;
        }