即使使用constans:case表达式也必须是常量表达式

时间:2013-11-16 11:21:40

标签: android constants adt final

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case Constants.EXIT :   
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

和Constants类:

public  class Constants {

    private Constants() {
    }

    public static final int EXIT = R.id.mExit;

}
我错过了什么? “menuExitButton”不是常数?

1 个答案:

答案 0 :(得分:0)

如果R.id.mExit来自libary项目资源文件,则它不是常量表达式。使用非常量表达式初始化static final变量不会使变量本身保持不变。

有关内容变量初始化的更多信息,请参阅评论中@still_learning链接的answer

将声明标识符的资源移动到主应用程序项目,使其成为可在switch表达式中使用的常量变量,或者只用switch替换if - else