2012-08-13 50 views
1

我有一个列表视图,我正在动态加载项目。 问题是当我激活该活动。它需要很长时间,所以我必须在加载UI时显示一些进度对话框。 我真的不知道该怎么做,因为doInBackground(如果使用异步任务)不允许开发人员混淆UI。 我该怎么办?如何在加载UI项目时显示ProgressDialog?

这里是我的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

我认为你应该使用这个延迟加载。 – Dhrupal 2012-08-13 06:39:12

+0

把你的适配器的代码放在这里。 – 2012-08-13 06:43:48

+1

活动获得了一个名为runOnUIThread的方法。 – reTs 2012-08-13 06:45:20

回答

2

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

编辑:
在Asynctask的OnPostExecute中使用Setadapter。 OnPostExecute,OnPreExecute,OnProgressUpdate,OnCancelled都在UI线程上运行。如果你还是坚持ProgressDialog,然后在OnPreExecute创建对话框,并在OnpostExecute驳回和OnCancelled的的AsyncTask

+0

我应该用什么方法放置“setAdapter”? – ohadinho 2012-08-13 06:46:29

+1

检查编辑。 – nandeesh 2012-08-13 06:50:37

0

请使用AsyncTask如果列表加载服用过多time.Place一个进度条上列表视图中使用的顶部,在AsyncTask.Hope这将有助于您

2

,可以用AsyncTask帮助(智能底色线程)和ProgressDialog

一个ProgressDialog与实现当AsyncTask启动时会引发不确定状态,并且一旦任务完成,对话框将被解除。

示例代码

什么适配器确实在这个例子就明白了,你需要使用的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(); 
    } 
}