2015-04-28 35 views
0

我有一種方法可以將數據放在非常大的數組中,並在顯示器上顯示一個非常大的表格。桌子太大,屏幕一會兒空白。我可以將顯示方法放入Asynctask中並顯示進度條,直到顯示方法完成?使用AsyncTask顯示大型表格

+1

您可以發佈您的代碼顯示?你在使用ListView嗎? – Chaosit

+0

現在無法訪問我的代碼,但是,我沒有使用ListView。我正在使用tableView。也許我需要使用scrollView的懶惰顯示。 –

回答

0

不,您無法從背景訪問視圖。您可以在後臺線程中將數據加載到數組中(因此它不會在加載過程中阻止UI),然後將此數組用於ListView的適配器。我可以回答你的詳細信息,如果您發佈的代碼

0

正如Chaosit提到你不能從後臺線程訪問UI。

考慮異步任務加載數據,該表加載到用戶界面的嘗試,以使其逐列。如果你使用的是listView,那麼有些技術可以在不渲染整個表格的情況下添加/編輯單元格。

我使用的相同的技術具有大量需要加以渲染爲所述用戶的PIN的處理時移動所述地圖由1 .I加載它們中的一些,並將其呈現1到用戶界面。

0

加載數據的體積大,最好的辦法是顯示onPreExecute()一個ProgressBar,在doInBackground(...)加載數據和onPostExecute(Boolean success)進度條的可見性設置爲GONE

另外一個不錯的方式做到這一點是onPreExecute()顯示Dialog調用.show()並關閉它在onPostExecute(Boolean success),也許更新的onProgressUpdate(String... message)對話框消息。

只要記住,你不能更新或更改doInBackground(...)你的用戶界面,但你可以在onPreExecute()onPostExecute(Boolean success)onProgressUpdate(String... message)

0

如果數據是從數據庫中來(或從遠程源),那麼可以考慮使用裝載機/ CursorAdapter的 - 打造你的ListView。這是加載數據的一種非常有效的方式。

如果你從文件中讀取數據陣列然後嘗試打破數據 - 和公正的選擇,你在屏幕上顯示,而不是從文件中讀取的所有數據中的數據,並嘗試呈現不會顯示的項目 - 然後您可以使用AsyncTask或線程(和處理程序)來更新您的表格。

正如其他人所說,只有主線程可以更新UI。

0

當然不是所有的數據都一次顯示! 查看Loaders指南。它將允許您加載大型數據集,並僅顯示其中的一部分,從而減少加載時間。

0

說可以使用的AsyncTask作爲

class TestAsync extends AsyncTask<Void, Integer, String> 
{  
    protected void onPreExecute() 
    { 
    //Start showing progress bar here ... 
    } 

    protected String doInBackground(Void...arg0) 
    { 
    // Do long running operation here ... 

    return "You are at PostExecute"; 
    } 

    protected void onPostExecute(String result) 
    { 
    // Start displaying data in your table view and dismiss the progress bar 
    } 
} 

這樣稱呼它在你的活動來實現的功能:

new TestAsync().execute();