2011-07-23 60 views
0

我正位于我的代码下面的两个错误下面(CheckBox) v.isChecked();Android设备上查看错误

类型不匹配:不能从复选框转换为Boolean

方法器isChecked()是未定义的类型查看

for(final int i = 0; i < setOfCheckBoxes.length; i++){ 

               setOfCheckBoxes[i].setOnClickListener(new View.OnClickListener(){  
     public void onClick(View v) {  
    selected[i] = (CheckBox) v.isChecked(); 
    } 
    }); 
} 

不知道我做错了,如果任何人有任何想法,请让我知道。

谢谢!

回答

4

方法调用按照操作顺序比强制转换更紧密。试试这个:

selected[i] = ((CheckBox) v).isChecked(); 

编辑:关于在内部类中使用'i',对捕获的索引和循环迭代使用单独的变量。试试这个:

for (int i = 0; i < setOfCheckBoxes.length; i++) { 
    final int index = i; 
    setOfCheckBoxes[i].setOnClickListener(new View.OnClickListener(){  
     public void onClick(View v) {  
      selected[index] = ((CheckBox) v).isChecked(); 
     } 
    }); 
} 
+0

它的奇怪我试过,但然后我得到我的i ++下的错误“最后的局部变量我不能分配。它必须是空白的,不使用复合赋值”我不能删除最终因为我在内部类中使用它。不知道为什么这两个影响彼此? – Denoteone

+0

为这个其他问题编辑。 :) – adamp

+0

谢谢你解决这个问题,并根据下面的讨论帮助我理解为什么。 – Denoteone

1

adamp是正确的。您必须这样做:

selected[i] = ((CheckBox) v).isChecked(); 

但是,您的变量“i”出现问题,因为它是最终的。将“int i = 0”移动到外部代码所在的任何函数(使其成为全局变量)。这将允许你在内部类中使用它。

+0

虽然这会起作用,但为了捕捉价值,在这个领域做出这样的事情是一种糟糕的形式。在循环中声明具有相同值的另一个最终变量将解决此问题。 – adamp

+0

我同意它的“糟糕的形式”,但它更糟糕的形式是为了此目的而快速实例化并销毁循环内的“final”变量。 – Chris

+0

移动开发以性能名义强制实施艰难决策? :P – Prime