我有一个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);
答案 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中使用它。希望这对您有所帮助