列表视图之前的Android进度对话框

时间:2013-02-07 22:39:07

标签: android multithreading listview progressdialog

我正在尝试在列表视图显示之前进行进度对话,因为列表视图上的项目已下载。

我得到这个是因为我试图用displayListView();

来改变线程中的listview
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()放在我的线程之外,我会得到nullpointerexeption。 displayListView()使用下载的 fieldsList arraylist。 我试图等待myThread.isAlive,但这样就没有显示progressdialog。 怎么解决?

我的代码:

@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();
}

1 个答案:

答案 0 :(得分:1)

必须从UI线程更新任何UI元素。您正在从后台线程操作对话框。因此,崩溃发生了。

快速修复将使用runOnUiThread(Runnable),在runnable中,您可以安全地更新任何UI元素。