简单的while循环不起作用

时间:2017-04-29 12:13:13

标签: java android while-loop

我有点问题。我认为解决方案非常简单,但不幸的是我无法找到它。我希望有一个人可以帮助我 我有一个while循环,必须计数到十并将数字写入TextView。 它仍然没有工作...... 谢谢你的帮助! 这是代码:

package de.androidnewcomer.animation;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

import static android.R.attr.button;
import static de.androidnewcomer.animation.R.id.textView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView ball=(ImageView)findViewById(R.id.ball);
    Button button=(Button)findViewById(R.id.button);
    button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button:
            count();
            break;
    }
}
private void count() {
    TextView textView=(TextView)findViewById(R.id.textView);
    int i;
    i=1;
    while(i<10) {
        i++;
        textView.setText(i);
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
}

3 个答案:

答案 0 :(得分:1)

将setText()与整数值一起使用用于设置字符串资源引用。要设置文本本身,您必须提供一个字符串:使用setText("" + i);它应该有效。

答案 1 :(得分:0)

textView.setText(..)需要一个字符串对象,但你使用的是int。您必须使用以下可能的选项将int转换为字符串:

  1. 您可以使用 String.valueOf(i)textView.setText(String.valueOf(i));

  2. 您可以使用 Integer.toString(i)textView.setText(Integer.toString(i));

  3. 您可以使用空字符串文字textView.setText("" + i);

  4. 我更喜欢最后一个选项。使用您的代码,它应该类似于以下代码:

    private void count() {
       TextView textView=(TextView)findViewById(R.id.textView);
       int i;
       i=1;
       while(i<10) {
           i++;
           textView.setText("" + i);
           try {
               Thread.sleep(200);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }
    }
    

    您可以使用for循环而不是while循环,如下面的代码:

    private void count() {
       TextView textView=(TextView)findViewById(R.id.textView);
    
       for(int i = 1; i < 11; i++){ // From 1 to 10
           textView.setText("" + i);
           Thread.sleep(200); 
       }
    }
    

答案 2 :(得分:0)

使用CountDown,因为您正在阻止主线程

CountDownTimer countDownTimer = new CountDownTimer(2000 /*amount*/, 200/*step*/) {
        public void onTick(long millisUntilFinished) {
           textView.setText("what ever you want");    
        }

        public void onFinish() {
            textView.setText("Done");
        }
    };
countDownTimer.start();