簡體   English   中英

列表視圖之前的Android進度對話框

[英]Android Progress dialog before listview

我試圖在顯示列表視圖之前進行進度對話框,因為下載了列表視圖上的項目。

我得到這個是因為我試圖用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();
}

必須從UI線程更新任何UI元素。 您正在從后台線程操縱對話框。 因此,發生了崩潰。

一個快速的解決方法是使用runOnUiThread(Runnable),在runnable內部,可以安全地更新任何UI元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM