我正在尝试实现一种行为,我根据特定条件动态更改按钮单击侦听器操作。 到目前为止,我已尝试过以下代码:
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分配给同一个按钮,但是新分配的listner不能正常工作,仍然执行旧的setOnClickListener。
答案 0 :(得分:0)
您可以在Click侦听器中编写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;
答案 1 :(得分:0)
每次单击按钮时,都会调用第一个onClickListener,并重新创建int i变量。所以它仍然等于零。然后它不会切换到第二个onClick监听器。可能你必须使你的int i变量全局化。
答案 2 :(得分:0)
为每个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);