0

リストビューのアイテムがダウンロードされるため、リストビューが表示される前に進行状況ダイアログを実行しようとしています。

これは、displayListView(); を使用してスレッドでリストビューを変更しようとしているためです。

02-08 00:25:48.959: W/System.err(3244): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

displayListView() をスレッドの外に置くと、nullpointerexption が発生します。displayListView() は、ダウンロードされたfieldsList arraylist を使用します。myThread.isAlive の間、待機しようとしましたが、このように進行状況ダイアログは表示されません。修正方法は?

私のコード:

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.build_main);
        final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setCancelable(true);
        dialog.setMessage("Loading...");
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setProgress(0);
        dialog.setMax(100);
        dialog.show();


        Thread myThread = new Thread(new Runnable() {
            public void run() {


                Builder builder = new Builder(server, user, password, BuildFieldsViewActivity.this, USER_AGENT);
                Document doc = null;
                doc = builder.DownloadPage("d.php?ne="+gyv_id);

                fieldsList = builder.getKaimas(doc);

                displayListView();

                dialog.setProgress(100);
                dialog.dismiss();
            }
        });
        myThread.start();
}
4

1 に答える 1

1

UI 要素は UI スレッドから更新する必要があります。バックグラウンド スレッドからダイアログを操作しています。したがって、クラッシュが発生しました。

簡単な修正は、runnable 内で runOnUiThread(Runnable) を使用することです。UI 要素を安全に更新できます。

于 2013-02-07T22:40:49.113 に答える