我的switch-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;
}
}
Run Code Online (Sandbox Code Playgroud)
所有R.id.int都用红色加下划线.
我差不多完成了一个计算活动,我正在Android中为我的应用程序工作.我尝试创建一个性别枚举,但由于某些原因变得语法错误,插入"EnumBody"完成EnumDeclaration.
public static enum Gender
{
static
{
Female = new Gender("Female", 1);
Gender[] arrayOfGender = new Gender[2];
arrayOfGender[0] = Male;
arrayOfGender[1] = Female;
ENUM$VALUES = arrayOfGender;
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有静态{}但我得到相同的语法错误.
我过去常常Bundle在如下界面中定义一组相关常量(如键):
public interface From{
String LOGIN_SCREEN = "LoginSCreen";
String NOTIFICATION = "Notification";
String WIDGET = "widget";
}
Run Code Online (Sandbox Code Playgroud)
这为我提供了一种更好的方法来将相关常量组合在一起并通过静态导入(而不是实现)来使用它们.我知道Android框架也使用常数在同样的方式一样Toast.LENTH_LONG,View.GONE.
但是,我经常觉得Java Enums提供更好,更强大的方式来表示常数.
但是,有没有在使用性能自动问题enums上Android?
通过一些研究,我最终陷入困惑.从Android的性能提示Google中删除了"避免使用只需要Ints的枚举"的问题
吗?显然已经从其性能提示中删除了"避免枚举",但是从它的官方培训文档中了解内存开销部分它清楚地说:"枚举通常需要的内存是静态常量的两倍多.你应该严格避免在Android上使用枚举."这仍然很好吗?(Java在1.6之后的版本中说)
我观察到的一个问题,更是发送enums跨intents使用Bundle我应该序列化给他们(即putSerializable(),我认为一个昂贵的操作比较原始的putString()方法沉绵enums提供它是免费的).
有人可以澄清哪一个是代表相同的最佳方式Android?我应该严格避免使用enums的Android?
我开始真的喜欢在代码中使用C#和Java枚举,原因如下:
但是,Android框架有许多情况需要传递各种类型的标志,但它们似乎都没有使用枚举.在那里我会认为他们的使用将是有益的一对夫妇的例子是Toast.LENGTH_SHORT/ Toast.LENGTH_LONG和View.GONE,View.VISIBLE等等.
为什么是这样?在Dalvik中,枚举的性能是否比简单的整数值差?还有其他一些我不知道的缺点吗?
我开发Android应用程序并经常使用注释作为编译时参数检查,主要是android的支持注释.
java代码中的示例:
public class Test
{
@IntDef({Speed.SLOW,Speed.NORMAL,Speed.FAST})
public @interface Speed
{
public static final int SLOW = 0;
public static final int NORMAL = 1;
public static final int FAST = 2;
}
@Speed
private int speed;
public void setSpeed(@Speed int speed)
{
this.speed = speed;
}
}
Run Code Online (Sandbox Code Playgroud)
由于Android中的性能问题,我不想使用枚举.kotlin的自动转换器只生成无效代码.如何@IntDef在kotlin中使用注释?
在Java Android应用程序中enum拥有一组static final ints 有什么优点(或缺点)?是否存在有利于使用其中一种或另一种的效率或性能优化?
我在上下文中询问了这个请求代码等等 - 它往往是Android示例代码中的内容,而不是我在C中习惯的枚举值.
我有这个代码示例:
class MeasureTextView: TextView {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
companion object{
val UNIT_NONE = -1
val UNIT_KG = 1
val UNIT_LB = 0
}
fun setMeasureText(number: Float, unitType: Int){
val suffix = when(unitType){
UNIT_NONE -> {
EMPTY_STRING
}
UNIT_KG -> {
KG_SUFIX
}
UNIT_LB -> {
LB_SUFIX
}
else -> …Run Code Online (Sandbox Code Playgroud) 在Java中,我们被告知要严格避免在Android上使用枚举,因为它们占用了两倍的内存.
这适用enum class于Kotlin吗?将Kotlin enum编译成Java enum吗?
proguard会自动将枚举转换为整数以进行内存优化,还是我必须将其配置为执行此操作?如果我必须配置什么配置?
由于枚举不是原始类型,在Android中通过aidl接口传递枚举的最有效方法是什么?有没有办法将枚举首先转换为序数?
我正在使用扩展Button创建一个类的实例,并直接访问整数变量以获得更好的性能.我正在使用常量来轻松识别变量的当前设置.
我有常量声明Button类和Activity类中实例化它们.我发现了类似的问题,并且读取它只是为了保持常量而创建一个类是不好的做法.
在两个类中使用相同的常量声明的最佳方法是什么?
我是初学程序员,所以我很有可能忽略了一个简单的解决方案.
按钮类:
public class GridButton extends Button {
public int displayStatus;
// constants for mine display status
private static final int UNTOUCHED = 1;
private static final int UNCOVERED = 2;
private static final int FLAGGED = 3;
private static final int HIT = 4;
...
}
Run Code Online (Sandbox Code Playgroud)
活动类:
public class PlayGameActivity extends Activity {
private GridButton[][] gridButtons;
// constants for mine display status
private static final int UNTOUCHED = 1;
private static final int UNCOVERED = 2; …Run Code Online (Sandbox Code Playgroud) android ×10
enums ×6
java ×5
kotlin ×3
aidl ×1
annotations ×1
constants ×1
performance ×1
primitive ×1
proguard ×1