0

我正在制作一个简单的应用程序,用户单击一个按钮,将 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++;
  }
}});
4

6 回答 6

3

if 语句不是这样工作的。当条件变为假时,控制流不会突然离开块并跳转到其他条件为真的 if 块。

于 2012-08-28T14:38:27.440 回答
3

从你的 if 语句

if (index == 0 && index > -1 && index < 5)

只要

if (index == 0) 

足够的

和第二个一样。。

if (index == 1) 
于 2012-08-28T14:36:47.637 回答
2

您的问题是您的index++语句在 onClick 回调中。因此,在单击按钮之前不会执行此代码。到那时,您的第二个 if 语句将长期执行。换句话说:

您的第一个 if 语句为真,这会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++;
        }
    }
});
于 2012-08-28T14:41:56.650 回答
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++;
    }
});
于 2012-08-28T15:01:38.063 回答
0

在 index == 1 或 index == 0 之后,其他条件的相关性是什么?

于 2012-08-28T14:39:13.577 回答
0

它不起作用的原因是侦听器可能添加在“onLoad”方法或类的构造函数中。

由于您setOnClickListener被 if 语句包围,因此只有当语句为真时才设置侦听器。在您的情况下,第一个陈述是正确的,而第二个陈述是错误的。

这意味着只添加第一个侦听器,并且每次单击按钮时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
    }
  });
}

每次用户点击按钮“一”时,都会调用 onClick。在 onClick 内部计算语句,并执行正确的“Do stuff”。

于 2012-08-28T14:42:23.950 回答