0

私は現在Androidアプリケーションを開発しています。textview値を定期的に更新する必要があります。

たとえば、値を1秒ごとに10ずつ増やしたいとします。次のコードで試しましたが、うまく機能していません:テキストビューは増分が終了した後にのみ更新されます

package com.example.stack1;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class MainActivity extends Activity{
 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }
    public void onResume(){
        super.onResume();
        TextView output=(TextView) findViewById(R.id.output);
        output.setText(String.valueOf(0));
        System.out.println(0);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        output.setText(String.valueOf(10));
        System.out.println(10);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        output.setText(String.valueOf(20));
        System.out.println(20);
    }
}

outputmain.xmlファイルのテキストビューです。このファイルには、このオブジェクトのみが含まれています。

注–テキストビューで期待される出力は「0」、10秒後は「10」、20秒後は「20」です。ただし、このコードでは、出力は20秒まで空白になり、その後「20」が表示されます。

4

1 に答える 1

0

スリープ時間中にプロセスで進行中のすべてを停止するのではなく、AlarmManagerのようなものを使用することをお勧めします。sleep()sleep()

何も表示されないのは、onResume()メソッドで実行しているためです。したがって、ディスプレイをロードするとき、実際に何かを表示する前に、そのメソッドを処理して、ユーザーのために設定を行います。

だから、あなたが欲しいのは:

  1. 値0でディスプレイをロードします
  2. 10秒待ちます
  3. インクリメントしてユーザーに表示
  4. 10秒待ちます
  5. インクリメントしてユーザーに表示

sleep()コマンドによって得られるものは次のとおりです。

  1. 値を0に設定します
  2. 10秒待ちます
  3. 値を10に設定します
  4. 10秒待ちます
  5. 値を20に設定します
  6. 表示値

AlarmManagerを使用して、onResume()メソッドでディスプレイが読み込まれることを初期化し、AlarmManagerが10秒ごとに値をインクリメントします。

于 2012-09-03T12:24:26.180 に答える