2012-08-13 47 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(); 
    } 
} 
相關問題