Java 如何让6个按钮在Android中使用不同的参数调用相同的方法?
无论是通过编程方式还是在xml文件中设置Java 如何让6个按钮在Android中使用不同的参数调用相同的方法?,java,android,view,onclick,onclicklistener,Java,Android,View,Onclick,Onclicklistener,无论是通过编程方式还是在xml文件中设置onClick方法,我都不知道如何通过它传递额外的参数。在以下代码中: for (int i = 0; i < 6; i++) { rollView[i].setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { changeKeepR
onClick
方法,我都不知道如何通过它传递额外的参数。在以下代码中:
for (int i = 0; i < 6; i++) {
rollView[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
changeKeepRoll(i);
}
});
}
for(int i=0;i<6;i++){
rollView[i].setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
changeKeepRoll(i);
}
});
}
我正在为6个不同的TextView
s设置onClickListener
,我想调用方法changeKeepRoll
,该方法将整数参数作为输入,但是我得到错误“变量“I”是从内部类中访问的,需要声明为final”。这意味着什么?我如何纠正它?for(int I=0;I<6;I++){
for (int i = 0; i < 6; i++) {
final int temp = i;
rollView[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
changeKeepRoll(temp);
}
});
}
最终内部温度=i;
rollView[i].setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
换基尔(临时);
}
});
}
用于(int i=0;i<6;i++){
最终内部温度=i;
rollView[i].setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
换基尔(临时);
}
});
}
实现OnClickListener类并使用不同的参数集重载该方法
public class myClass implements View.OnClickListener {
int changeKeepRoll;
@Override
public void onClick(View v) {
}
public void onClick(int i) {
}
}
将changeKeepoll变量置于方法范围之外或使其成为最终变量。实现OnClickListener类并使用不同的参数集重载方法
public class myClass implements View.OnClickListener {
int changeKeepRoll;
@Override
public void onClick(View v) {
}
public void onClick(int i) {
}
}
将changeKeepoll变量置于方法范围之外或将其设为最终变量。您可以通过实现以下接口将参数传递给
OnClickListener
:
class MyOnClickListener implements OnClickListener {
private int i;
public MyOnClickListener(int i) {
this.i = i;
}
public void onClick(View view) {
changeKeepRoll(i);
}
}
并且,您的for
循环将如下所示:
for(int i = 0; i < rollView.length; i ++) {
rollView[i].setOnClickListener(new MyOnClickListener(i));
}
for(int i=0;i
这是以前提出的问题:
希望这有帮助,
Bala您可以通过实现以下接口将参数传递给
OnClickListener
:
class MyOnClickListener implements OnClickListener {
private int i;
public MyOnClickListener(int i) {
this.i = i;
}
public void onClick(View view) {
changeKeepRoll(i);
}
}
并且,您的for
循环将如下所示:
for(int i = 0; i < rollView.length; i ++) {
rollView[i].setOnClickListener(new MyOnClickListener(i));
}
for(int i=0;i
这是以前提出的问题:
希望这有帮助,
BalaJava有一条规则,如果您使用匿名内部类来实例化对象,则内部使用的任何变量都必须在该块内声明,或者如果您希望使用块外的变量,则该对象必须是最终的或有效的最终(Java 8)Java有一条规则,如果你使用匿名内部类来实例化一个对象,内部使用的任何变量都必须在该块内声明,或者如果你想使用块外的变量,该对象必须是最终的或有效的最终(Java 8)@Thomas Doyle这个答案是最好的实践。。。我的答案是欺骗编译器,我只是想帮助您不要对代码做太多更改;)@Kushan我认为你低估了自己-这不是黑客行为,也不是在愚弄编译器。它们是循环变量的闭包工作方式(匿名的东西必须在变量上关闭),这是一个真正的修复。Net也有同样的要求——它与实现或编译器无关,而是与闭包本身的哲学“形而上学”有关。(当然,编译器可以自动完成这项工作,但很恶心)。@Thomas Doyle这是最佳实践。。。我的答案是欺骗编译器,我只是想帮助您不要对代码做太多更改;)@Kushan我认为你低估了自己-这不是黑客行为,也不是在愚弄编译器。它们是循环变量的闭包工作方式(匿名的东西必须在变量上关闭),这是一个真正的修复。Net也有同样的要求——它与实现或编译器无关,而是与闭包本身的哲学“形而上学”有关。(当然,编译器可以自动实现这一点,但很恶心)。