Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android视图错误_Java_Android_View - Fatal编程技术网

Java Android视图错误

Java Android视图错误,java,android,view,Java,Android,View,我在下面的代码中发现以下两个错误(CheckBox)v.isChecked(): 类型不匹配:无法从复选框转换为布尔值 类型视图的方法isChecked()未定义 for(final int i = 0; i < setOfCheckBoxes.length; i++){ setOfCheckBoxes[i].setOnClickListener(new View.OnClickListene

我在下面的代码中发现以下两个错误
(CheckBox)v.isChecked()

类型不匹配:无法从复选框转换为布尔值

类型视图的方法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();
     }
   });
 }
for(final int i=0;i
不确定我做错了什么,如果有人有任何想法,请让我知道


谢谢

方法调用在操作顺序上比强制转换绑定得更紧。试试这个:

selected[i] = ((CheckBox) v).isChecked();
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();
        }
    });
}
编辑:关于在内部类中使用“i”,请为捕获的索引和循环迭代使用单独的变量。试试这个:

selected[i] = ((CheckBox) v).isChecked();
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();
        }
    });
}
for(int i=0;i
方法调用在操作顺序上比强制转换绑定得更紧。试试这个:

selected[i] = ((CheckBox) v).isChecked();
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();
        }
    });
}
编辑:关于在内部类中使用“i”,请为捕获的索引和循环迭代使用单独的变量。试试这个:

selected[i] = ((CheckBox) v).isChecked();
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();
        }
    });
}
for(int i=0;i
adamp是正确的。你必须做到:

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

但是,变量“i”有问题,因为它是final。将“inti=0”移到该代码所在的函数之外(使其成为全局变量)。这将允许您在内部类中也使用它。

adamp是正确的。你必须做到:

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

但是,变量“i”有问题,因为它是final。将“inti=0”移到该代码所在的函数之外(使其成为全局变量)。这将允许您在内部类中也使用它。

这很奇怪,我尝试过,但后来在我的I++下出现了错误“最终局部变量我不能赋值。它必须为空,并且不能使用复合赋值”我不能删除final,因为我在内部类中使用它。不确定这两个因素为什么会相互影响?为另一期编辑:)感谢您修复了这个问题,并根据下面的讨论帮助我理解了原因。这很奇怪,我尝试了,但后来在我的I++下出现了错误:“最终的局部变量我不能赋值。它必须为空,不能使用复合赋值”我不能删除final,因为我在内部类中使用它。不确定这两个因素为什么会相互影响?为另一期编辑:)感谢您解决了这个问题,基于下面的讨论,我了解了原因。虽然这样做可行,但将这样的内容放入字段只是为了获取价值,这是一种不好的形式。在循环中声明另一个具有相同值的最终变量将解决此问题。我同意它的“坏形式”,但更糟糕的形式是,仅出于此目的而在循环中快速实例化和销毁“最终”变量。Mobile dev以性能为名强迫做出艰难的决定:PIt不会在对象创建的意义上实例化任何东西,最坏情况下,它是堆栈上的另一个int。编译器不允许捕获非最终变量的值。想象一下,将'i'的值传递给匿名内部类的构造函数,并将其保存在内部类的最后一个字段中。我完全不同意。它导致垃圾收集器必须在每次迭代中创建、跟踪和删除一个新变量。当一个变量可以重复使用时,这会增加大量不必要的开销。没有人想在循环中声明变量是有原因的。虽然这会起作用,但在字段中创建这样的内容只是为了捕获值是不好的。在循环中声明另一个具有相同值的最终变量将解决此问题。我同意它的“坏形式”,但更糟糕的形式是,仅出于此目的而在循环中快速实例化和销毁“最终”变量。Mobile dev以性能为名强迫做出艰难的决定:PIt不会在对象创建的意义上实例化任何东西,最坏情况下,它是堆栈上的另一个int。编译器不允许捕获非最终变量的值。想象一下,将'i'的值传递给匿名内部类的构造函数,并将其保存在内部类的最后一个字段中。我完全不同意。它导致垃圾收集器必须在每次迭代中创建、跟踪和删除一个新变量。当一个变量可以重复使用时,这会增加大量不必要的开销。没有人想在循环中声明变量是有原因的。