ケース:アクティビティにボタンとリストビューがあります。ボタンをクリックすると、進行状況バーを更新する新しいスレッドを開始するクリック リスナーを追加しました。仕事が完了した後、つまりプログレスバーが 100% 完了したら、リストビューを更新したいと思います。
final OnClickListener mStartScan = new OnClickListener() {
    @Override
    public void onClick(View v) {
        // prepare for a progress bar dialog
        progressBar = new ProgressDialog(v.getContext());
        progressBar.setCancelable(false);
        progressBar.setMessage(getString(R.string.text_scanning_inbox));
        progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressBar.setProgress(0);
        progressBar.setMax(totalSms);
        progressBar.show();
        progressBarStatus = 0;
        Thread progressThread = new Thread(new Runnable() {
            public void run() {
                while (progressBarStatus < totalSms) {
                    // process some tasks
                    progressBarStatus = someStuff();
                    // Update the progress bar
                    progressBarHandler.post(new Runnable() {
                        public void run() {
                            progressBar.setProgress(progressBarStatus);
                        }
                    });
                }
                if (progressBarStatus >= done) {
                    // sleep 1 seconds, so that you can see the 100%
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // close the progress bar dialog
                    progressBar.dismiss();
                    // this method updates the list
                    populateList();
                }
            }
        });
        progressThread.start();
//          try {
//              progressThread.join();
//          } catch (InterruptedException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          } finally {
//              populateList();
//          }           
        }
};
問題:タスクが完了してプログレス バーを閉じた後にリストビューを更新すると、ビューが作成されたスレッドからのみビューを更新できるという例外が発生します。
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
他に試したこと:プログレスバーを実行しているスレッドが完了するのを待ってから、メインスレッドからリストビューを更新しようとしました。
try {
    progressThread.join();
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {
    populateList();
}
ただし、これは機能しません。プログレスバーはまったく表示されません。