簡體   English   中英

簡單的while循環不起作用

[英]Simple while-loop doesnt work

我有一個小問題。 我認為解決方案非常簡單,但不幸的是我找不到它。 我希望有人可以幫助我,我有一個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();
        }
    }
}
}

將setText()與整數值一起使用是為了設置字符串資源引用。 要設置文本本身,您必須提供一個字符串:使用setText("" + i); 它應該工作。

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);

我更喜歡最后一個選擇。 使用您的代碼,它應類似於以下代碼:

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); 
   }
}

使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM