我昨天的转换 case 陈述非常有效.但是当我今天早上早些时候运行代码时,eclipse给了我一个错误,在红色的case语句下面加了下划线,并说:case表达式必须是常量表达式,它是常量,我不知道发生了什么.下面是我的代码:

public void onClick(View src)
    {
        switch(src.getId()) {
        case R.id.playbtn:
            checkwificonnection();
            break;

        case R.id.stopbtn:
            Log.d(TAG, "onClick: stopping srvice");
            Playbutton.setImageResource(R.drawable.playbtn1);
            Playbutton.setVisibility(0); //visible
            Stopbutton.setVisibility(4); //invisible
            stopService(new Intent(RakistaRadio.this,myservice.class));
            clearstatusbar();
            timer.cancel();
            Title.setText(" ");
            Artist.setText(" ");
            break;

        case R.id.btnmenu:
            openOptionsMenu();
            break;
        }
    }

所有的R.id.int都用红色下划线.

推荐答案

在常规Android项目中,资源R类中的常量声明如下:

public static final int main=0x7f030004;

然而,从ADT 14开始,在一个库项目中,它们将被声明如下:

public static int main=0x7f030004;

换句话说,常量在库项目中不是最终的. 因此,您的代码将不再编译.

解决方法很简单:将switch语句转换为if-else语句.

public void onClick(View src)
{
    int id = src.getId();
    if (id == R.id.playbtn){
        checkwificonnection();
    } else if (id == R.id.stopbtn){
        Log.d(TAG, "onClick: stopping srvice");
        Playbutton.setImageResource(R.drawable.playbtn1);
        Playbutton.setVisibility(0); //visible
        Stopbutton.setVisibility(4); //invisible
        stopService(new Intent(RakistaRadio.this,myservice.class));
        clearstatusbar();
        timer.cancel();
        Title.setText(" ");
        Artist.setText(" ");
    } else if (id == R.id.btnmenu){
        openOptionsMenu();
    }
}

http://tools.android.com/tips/non-constant-fields

可以使用以下命令将switch语句快速转换为if-else语句:

In Eclipse
Move your cursor to the switch keyword and press Ctrl + 1 then select

将"Switch"转换为"If-Else".

In Android Studio
Move your cursor to the switch keyword and press Alt + Enter then select

将"switch"替换为"if".

Android相关问答推荐

RippleTheme在作曲material 1.7.0中被废弃

listOf(listOf(字符串))在lazyArchitect(lazyStream)中合成

如何将子零部件的大小调整为可以调整大小的父组件大小?

Android意图过滤器不限制应用程序仅处理YouTube链接

使用Kotlin/Compose与Java/XML指南的比较

原始mp3文件不显示与proguard

每次重启Android时预填入Room数据库

react 本机生成失败,出现异常.错误:无法确定';<;宏/>;的类型

学习Kotlin问题.无法理解Modifier参数

如何检测低性能 Android 设备进行条件动画渲染?

Andorid Studio编译器如何自动为变量editText生成mutableStateOf("")的方法名?

在单元测试下断言协程未完成

围绕动态大小的内容包装 Jetpack Compose Row?

了解 Compose 声明性逻辑

观察软键盘可见性,打开/关闭 Jetpack Compose

如何关闭可组合对话框?

Int 传递给 Intent 但Android工作室说我传递了一个字符串

在 Android Studio 中替换字符串中的 "

jetpack compose 中的可点击指示是什么?

设备文件资源管理器-ROOM 数据库中的数据库文件夹为空