如何在 android 中动态更改按钮单击的侦听器实例
How to change listner instance of a button click dynamically in android
我正在尝试实现一种行为,即根据特定条件动态更改按钮单击侦听器操作。
到目前为止,我已经尝试了以下代码:
Button button = (Button) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
int i =0;
@Override
public void onClick(View v) {
if(i>0){
button.setOnClickListener(null);
buttonsetOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do another function
}
});
}
i++;
}
});
我在 setOnClickListener 上设置了 null,然后将新的 setOnClickListener 分配给同一个按钮,但是新分配的监听器不工作,它仍然执行旧的 setOnClickListener。
您可以在点击监听器中编写您的 if-else 逻辑,而不是设置新的监听器。
boolean imageUploaded = false;
button.setOnClickListener(new View.OnClickListener() {
int i =0;
@Override
public void onClick(View v) {
if(imageUploaded){
//do some stuff.
} else {
//do other stuff
}
i++;
});
}
而上传图片时,只需设置
imageUploaded = true;
每次点击按钮时,都会调用第一个onClickListener,并重新创建int i 变量。所以它仍然等于零。然后它不会切换到第二个 onClick 侦听器。可能你必须让你的 int i 变量成为全局变量。
为每个 onclicklistener 创建一个新的 onclicklistener 实例,例如:
final View.OnClickListener listener3 = new View.OnClickListener() {
@Override
public void onClick(View v) {
//do stuff
}
};
final View.OnClickListener listener2 = new View.OnClickListener() {
@Override
public void onClick(View v) {
btnNext.setOnClickListener(listener3);
// do stuff
}
};
View.OnClickListener listener1 = new View.OnClickListener() {
@Override
public void onClick(View v) {
btnNext.setOnClickListener(listener2);
//do stuff
}
};
btnNext.setOnClickListener(listener1);
我正在尝试实现一种行为,即根据特定条件动态更改按钮单击侦听器操作。 到目前为止,我已经尝试了以下代码:
Button button = (Button) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
int i =0;
@Override
public void onClick(View v) {
if(i>0){
button.setOnClickListener(null);
buttonsetOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do another function
}
});
}
i++;
}
});
我在 setOnClickListener 上设置了 null,然后将新的 setOnClickListener 分配给同一个按钮,但是新分配的监听器不工作,它仍然执行旧的 setOnClickListener。
您可以在点击监听器中编写您的 if-else 逻辑,而不是设置新的监听器。
boolean imageUploaded = false;
button.setOnClickListener(new View.OnClickListener() {
int i =0;
@Override
public void onClick(View v) {
if(imageUploaded){
//do some stuff.
} else {
//do other stuff
}
i++;
});
}
而上传图片时,只需设置
imageUploaded = true;
每次点击按钮时,都会调用第一个onClickListener,并重新创建int i 变量。所以它仍然等于零。然后它不会切换到第二个 onClick 侦听器。可能你必须让你的 int i 变量成为全局变量。
为每个 onclicklistener 创建一个新的 onclicklistener 实例,例如:
final View.OnClickListener listener3 = new View.OnClickListener() {
@Override
public void onClick(View v) {
//do stuff
}
};
final View.OnClickListener listener2 = new View.OnClickListener() {
@Override
public void onClick(View v) {
btnNext.setOnClickListener(listener3);
// do stuff
}
};
View.OnClickListener listener1 = new View.OnClickListener() {
@Override
public void onClick(View v) {
btnNext.setOnClickListener(listener2);
//do stuff
}
};
btnNext.setOnClickListener(listener1);