如何在加载UI项目时显示ProgressDialog?

时间:2012-08-13 06:32:59

标签: android android-layout android-listview

我有一个listview,我正在动态加载项目。 问题是我正在激活那项活动。这需要很长时间,所以我必须在加载UI时显示一些进度对话框。 我真的不知道该怎么做,因为doInBackground(如果使用Async任务)不允许开发人员弄乱UI。 我该怎么办?

这是我的UI加载代码:

LeagueTableRow leagueTableRow_data[] = new LeagueTableRow[]
                    {
                        new LeagueTableRow(1,R.drawable.logo,"aaa",12,9,3,14),
                        new LeagueTableRow(3,R.drawable.logo,"aaa",12,9,3,14),
                        new LeagueTableRow(4,R.drawable.logo,"aaa",12,9,3,14),
                        new LeagueTableRow(5,R.drawable.logo,"aaa",12,9,3,14),
                            new LeagueTableRow(2,R.drawable.logo,"aaa",12,9,3,14)
                    };

                    LeagueTableRowAdapter adapter = new LeagueTableRowAdapter(context, 
                            R.layout.leaguetablecontent, leagueTableRow_data);


                    listViewLeagueTable = (ListView)findViewById(R.id.listViewLeagueTable);

                    View header = (View)getLayoutInflater().inflate(R.layout.leaguetableheader, null);
                    listViewLeagueTable.addHeaderView(header);

                    listViewLeagueTable.setAdapter(adapter);

3 个答案:

答案 0 :(得分:2)

如果您使用listView.setEmptyView设置空视图。视图将显示在列表的位置,直到您在列表上执行setadapter。所以只要你做setAdapter,空视图就会消失。您可以将Progressbar传递给您案例中的setEmptyview以显示进度条。

编辑:
在Asynctask的OnPostExecute中使用Setadapter。 OnPostExecute,OnPreExecute,OnProgressUpdate,OnCancelled都在UI线程上运行。如果你仍然坚持使用ProgressDialog,那么在OnPreExecute中创建对话框,并在Asyntask的OnpostExecute和OnCancelled中将其关闭

答案 1 :(得分:2)

这可以在AsyncTask(智能背景线程)和ProgressDialog

的帮助下实现

AsyncTask启动时会引发具有不确定状态的ProgressDialog,一旦任务完成,对话框就会被解除。

示例代码

适配器在此示例中的作用并不重要,更重要的是要了解您需要使用AsyncTask来显示进度的对话框。

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > {
    ProgressDialog dialog;
    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(viewContacts.this);
        dialog.setMessage(getString(R.string.please_wait_while_loading));
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
    }
    /* (non-Javadoc)
     * @see android.os.AsyncTask#doInBackground(Params[])
     */
    @Override
    protected ContactsListCursorAdapter doInBackground(Void... params) {
        cur1 = objItem.getContacts();
        startManagingCursor(cur1);

        adapter1 = new ContactsListCursorAdapter (viewContacts.this,
                R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {});

        return adapter1;
    }

    protected void onPostExecute(ContactsListCursorAdapter result) {
        list.setAdapter(result);
        dialog.dismiss();
    }
}

答案 2 :(得分:0)

如果加载列表花费太多时间,请使用AsyncTask。在列表视图顶部放置一个进度条,在AsyncTask中使用它。希望这对您有所帮助