0

4秒でテキストフィールドを更新する必要がある単純なタスクをスケジュールしています。

ただし、これが呼び出されるたびに、アクティビティは一時停止し、アクティビティを再開するまでテキストフィールドに値が表示されません。

 private void showDelayedValue() {

    Runnable longRunningTask = new Runnable() {
        public void run() {

        int randomVal = randomNumberGenerator.nextInt(30 - -10) - 10; //random number between -10 and 30
        String randomValStr = Integer.toString(randomVal);

            Log.i(this.getClass().getSimpleName(),
                "FIRED startScheduler: " + randomValStr);

        theFieldOnScreenTV.setText(randomTempStr);

        }
    };
    //show the value in 2 seconds
    scheduledTaskExecutor.schedule(longRunningTask, 4, TimeUnit.SECONDS);

    }

ログは次のことを示しています。

FIRED startScheduler: 4

しかし、更新しませんTextView theFieldOnScreenTV

代わり に、LogCatに表示されたonPause直後に呼び出されます。Fired startScheduler:

どうもありがとう!

編集:

これは、アレックスのアプローチに従って私のために働きました:

private void showDelayedValue() {
    int randomX = randomNumberGenerator.nextInt(30 - -10) - 10; 
    final String randomXStr = Integer.toString(randomX);
    final Runnable updateFieldR = new Runnable() {
        public void run() {
        theFieldOnScreenTV.setText(randomXStr);
        }
    };

    Runnable longRunningTask = new Runnable() {
        public void run() {
        theFieldOnScreenTV.post(updateFieldR);

        }
    };
    scheduledTaskExecutor.schedule(longRunningTask, 4, TimeUnit.SECONDS);

    }
4

2 に答える 2

1

それ以外の

theFieldOnScreenTV.setText(randomTempStr); 

試す

theFieldOnScreenTV.post(new Runnable() { theFieldOnScreenTV.setText(randomTempStr); } );
于 2012-10-29T15:24:39.320 に答える
0

ハンドラーを使用してみてください。

Handler handler = new Handler();
handler.post(new Runnable() {

@Override
public void run() {

theFieldOnScreenTV.setText(randomTempStr);          
    }
});
于 2012-10-29T15:57:10.833 に答える