我正在创建一个简单的应用程序,用户单击一个按钮,将TextView更改为相应的字符串,但是当我的第一个if语句满足时,它不会继续执行以下if语句。
if (index == 0 && index > -1 && index < 5) {
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
index++;
text1.setText("1");
}
});
这是我的第一个if语句,它将TextView设置为“1”,然后应该添加到整数“index”,这会将索引的值转换为“1”,这应该结束此语句,因为它不再符合条件,这将开始以下if语句。
if (index == 1 && index > -1 && index < 5) {
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
text2.setText("1");
index++;
}
});
现在由于先前的if
语句将索引的变量设置为“1”,这个if
语句应该开始并且前一个结束,但事实并非如此,即使变量不再符合条件,它不会停止,下一个if语句不会开始。好像if
语句被忽略了。
更新
我解决了我的问题,这就是我将代码更改为:
one.setOnClickListener(new View.OnClickListener(){public void onClick(View v){
if(index == 0){
text1.setText("1");
index++;
}else if(index == 1){
text2.setText("1");
index++;
}else if(index == 2){
text3.setText("1");
index++;
}else if(index == 3){
text4.setText("1");
index++;
}
}});
答案 0 :(得分:3)
来自你的if语句
if (index == 0 && index > -1 && index < 5)
仅
if (index == 0)
就够了
与第二个相同..
if (index == 1)
答案 1 :(得分:3)
这不是if语句的工作方式。当条件变为false时,控制流不会突然离开块并跳转到具有真实条件的其他if块。
答案 2 :(得分:2)
您的问题是您的index++
语句位于onClick回调中。因此,在单击按钮之前不会执行此代码。到那时,你的第二个if语句将被执行。换句话说:
您的第一个if语句为true,这会为该按钮添加一个onClick
侦听器。你的第二个陈述是假的,这什么都不做。用户单击按钮。现在仅执行第一个回调中的代码:index
增加,文本设置为“1”。就是这样。
[编辑这可能就是你想要的]
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if ( index == 0 ) {
index++;
text1.setText("1");
} else if (index == 1 ) {
text2.setText("1");
index++;
}
}
});
答案 3 :(得分:0)
在索引== 1或索引== 0之后,其他条件的相关性是什么?
答案 4 :(得分:0)
它不起作用的原因是,侦听器可能被添加到“onLoad”方法或类的构造函数中。
由于setOnClickListener
被if语句包围,因此仅在语句为true时才设置侦听器。在您的情况下,第一个语句为true,而seccond语句为false。
这意味着只添加了第一个列表器,每次单击该按钮时,都会调用text1.setText("1")
。
您应该将if语句放在onClickListener中,而不是设置监听器的逻辑。所以下面的代码:
if (index == 0 && index > -1 && index < 5) {
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
index++;
text1.setText("1");
}
});
应该是
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (index == 0) {
index++;
// Do stuff
} else if(index == 1) {
index++;
// Do stuff
}
});
}
每次用户点击“one”按钮时,都会调用onClick。 在onClick内部计算语句,并执行正确的“Do stuff”。
答案 5 :(得分:0)
另一个可行的解决方案:
if ((index > -1) && (index < 5)) {
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
text2.setText(index.toString());
index++;
}
});
- 显然这取决于你需要的逻辑,如果你在index == 0时确实需要另一次出现,你必须改变这种格式:
if (index == 0) {
//Whatever you want to do here... eg:
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
text2.setText("0");
index++;
}
});
}
else if ((index > -1) && (index < 5)) {
one.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
text2.setText(index.toString());
index++;
}
});