2

TextViewを更新するループを作成しようとしています。アイデアは、ある種の進行状況インジケーターを作成することです。これにより、読み込みの割合が増加します。

これは私が試したものですが、結果としてループの最後の更新のみが表示されるため、増分なしで「100%」が得られます。

    runOnUiThread(new Runnable() {
                         public void run() {
                            final TextView progesss = (TextView)findViewById(R.id.progress);
                            for(int k=1 ; k<=100; k++)
                            {
                                progesss.setText(String.valueOf(k) + "%");

                                try {
                                    Thread.sleep(15);
                                    } catch(InterruptedException e) {
                                    } 
                            }
                         }
                     });

私の目標を達成する方法について何かアイデアはありますか?ありがとう!

4

2 に答える 2

2

を実行すると、 UIスレッドRunnableブロックされます。寝るのではなく、また新しく投稿するべきです。次のようなものを試してください:Thread.sleepRunnable

final Handler handler = new Handler();
handler.post( new Runnable(){ 
    private int k = 0;

    public void run() {
        final TextView progess = (TextView)findViewById(R.id.progress);
        progess.setText(String.valueOf(k) + "%");

        k++;
        if( k <= 100 )
        {
            // Here `this` refers to the anonymous `Runnable`
            handler.postDelayed(this, 15);
        }
    }
});

これにより、各呼び出しの間にUI スレッドを実行する機会が与えられ、入力の処理や画面への描画などの処理が可能になります。

于 2012-12-28T19:21:00.217 に答える
0

バックグラウンド スレッドと UI スレッドを使用します。

public class testAsync extends AsyncTask<Void, Integer, Voi>{

TextView progress; // You will set TextView referans

protected void doInBackground(){

 for(int k=1 ; k<=100; k++)

  {

    try {
    Thread.sleep(1000);
    publishProgress(k); 
   } catch(InterruptedException e) {}
   }
 }
protected void onProgressUpdate(Integer.. values)
{
progress.setText(values[0]+");
}

}



}
于 2012-12-28T19:27:52.317 に答える