3

私はに非常に新しいですAndroidJava以前使用しましたが、1年半ほど使用していません。画面を更新するのに問題がありますTextView。解決策を求めて何時間もネットを見回しましたが、なぜ機能しないのかはある程度わかっていますが、修正方法はわかりません。

public class PreliminaryActivity extends Activity {

//private static final int MENU_QUIT = Menu.FIRST;
int i = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    getWindow().setBackgroundDrawableResource(R.drawable.background);
    mainComputations();
}

    public void mainComputations(){
        runOnUiThread(new Runnable(){
        //@Override
            public void run(){

                TextView tv = (TextView) findViewById(R.id.time_display);

                tv.setText(new Integer(i).toString());
                i++;
            }
        });
    }

テストのために画面上の int 値をインクリメントするだけで、まだ機能しないように、プログラムを削減しました。代わりに、「0」が表示されます。メソッドの前に for ループを追加するとrunOnUiThread()、i 値がインクリメントされますが、リアルタイムで更新するのではなく、単に値を増やしてから表示しているように感じます。どんな助けでも大歓迎です。

4

5 に答える 5

2

TextSwitcherに行く

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.html

テキストビューを少し遅れて更新したい場合。このようなものを使用してください。

 final int length = 10;
 Thread t = new Thread(new Runnable() {

     @Override
     public void run() {
        for(int i=0 ; i<length; i++) {
           runOnUiThread(new Runnable() {

              @Override
              public void run() {
                tv.setText(new Integer(i).toString());
              }
           }) ; 
           i++;
           Thread.sleep(500);
        }
     }
  });
  t.start();
于 2012-05-02T12:23:48.107 に答える
0

Android では、別のスレッドから UI を更新することはできません。これは、Android 開発における制限 (不要なバグを除去するための機能と考えています) です。これには AsyncTask を使用できます...

使用中は、donInBackground() 内で長いタスクを実行でき、onProgressUpdate() を使用して UI を更新できます... こちらの AsyncTask の例を参照してください

編集

詳細については、この同様の質問を参照してください...

于 2012-05-02T12:24:39.740 に答える
0

あなたの問題は、mainComputations()一度だけ呼び出すためです。AsyncTaskAndroid 開発者リソースUpdating the UI from a Timer をご覧ください。

于 2012-05-02T12:24:46.683 に答える
0

Handler を使用する必要があるため、別のスレッドからメイン UI スレッドを更新することはできません。詳細については、このリンクを参照してください

http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-05-02T12:25:14.077 に答える
0

私が見ているのは、あなたが mainComputations を 1 回しか呼び出していないため、0 であるということです。

于 2012-05-02T12:26:30.453 に答える