2011-07-23 89 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