我在 switch/case 语句中遇到了问题。错误提示是:"Case expressions must be constant expressions"。我理解这个错误,并且可以使用 if 语句来解决它,但是有人能告诉我为什么 switch/case 中的 case 表达式必须是常量表达式吗?
public boolean onOptionsItemSelected(MenuItem item) {
int idDirectory = ((MenuItem) findViewById(R.id.createDirectory)).getItemId();
int idSuppression = ((MenuItem) findViewById(R.id.recycleTrash)).getItemId();
int idSeeTrash = ((MenuItem) findViewById(R.id.seeTrash)).getItemId();
switch (item.getItemId()) {
case idDirectory:
createDirectory(currentDirectory);
break;
case idSuppression:
recycleTrash();
break;
case idSeeTrash:
seeTrash();
break;
}
return super.onOptionsItemSelected(item);
}
感谢您的解释!!
findViewById().getItemId()
?如果你已经有了id,就不需要获取item来获取id了! - Anon.MenuItem
对象可能是在xml中定义的,而且(据我所知)如果不放弃MenuInflater.inflate()
的简单性,就无法轻松地对其进行子类化。 - idbrii