2

ボタンを押した後に関数を開始するAndroidアプリがあります(onCreate()の外で)。この関数は、 forループを使用してグローバル String 変数を 5 回変更します。画面 (つまり、TextView) に表示されるすべての変数を確認したい。RunnableHandlerを使用する必要があることは理解しましたが、..

MainActivity (アクティビティを拡張) / onCreate() :

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        handler.post(timedTask);
        Start();
    }
});

Start()は実行されますが、終了するまで画面には何も表示されません。

MainActivity (Activity を拡張) 内:

private Runnable timedTask = new Runnable()
{
      @Override
      public void run()
      {
          textView1 = (TextView) findViewById(R.id.textView1);
          textView1.append(globalMessage);
          handler.postDelayed(this, 100);
      }};

MainActivity (アクティビティを拡張) / Start() :

for(int j = 0; j < 5; j++)
{
    ...
    globalMessage = message[j];
    ...
}
4

2 に答える 2

2

まず、異なるスレッドから変数にアクセスしています。として宣言する必要がありますvolatile

timedTaskglobalMessage の 5 つの値を表示しますか?

timedTask をループと同期して、変更のたびに timedTask が実行されるようにしてください。

for(int j = 0; j < 5; j++)
{
    ...
    globalMessage = message[j];
    ...// wait sometime here or make sure it is a long operation that is enough for synchronization
}

編集

すぐhandler.postに実行可能にならない可能性があります。ランナブルを自分で開始できます。

(new Thread(timedTask)).start(); // instead of handler.post

または、最も簡単な方法を実行します。同じスレッドで for ループ内のテキストを更新するだけです。

于 2013-07-06T10:53:14.847 に答える