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;
}