TextView を持つアクティビティがあり、テキストを常に更新したい..
Java では、無限 while ループを作成し、反復ごとにテキストを設定することができました。
しかし、Android でそれを実行しようとすると、黒い画面が表示され、アクティビティも読み込まれません。
メソッドに無限を入れましたonCreate
。おそらくそれがクラッシュする理由です..しかし、もしそうなら、どこに入れればよいですか?
Whileループの代わりに、TextViewを常に更新するためにHandlerと別のスレッド/ランナブルを使用します。
Handler handler=new Handler();
handler.post(new Runnable(){
@Override
public void run() {
// upadte textView here
handler.postDelayed(this,500); // set time here to refresh textView
}
});
最小限の作業例
https://stackoverflow.com/a/14295193/895245に基づく:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final int i = 0;
final TextView textView = new TextView(this);
textView.setText(String.format("%d", i));
setContentView(textView);
final Handler handler = new Handler();
class MyRunnable implements Runnable {
private Handler handler;
private int i;
private TextView textView;
public MyRunnable(Handler handler, int i, TextView textView) {
this.handler = handler;
this.i = i;
this.textView = textView;
}
@Override
public void run() {
this.handler.postDelayed(this, 500);
this.i++;
this.textView.setText(String.format("%d", i));
}
}
handler.post(new MyRunnable(handler, i, textView));
}
}
これをコピーして、 によって生成されたメイン アクティビティに貼り付けるだけandroid create project [...]
で、アプリにカウンターが表示されます。
Android 22 でテスト済み。