2014-02-12 61 views
1

我是asynchronously下載將成爲GridView的一部分的圖像。並更新onCreate()GridView,我請一個runOnUiThread();如何正確通知此適配器其數據集已更改?

notifyDataSetChanged();現在,我的問題是:

有沒有更好的方式來做到這一點?我將Thread設置爲休眠2秒,以確保映像在適配器中的數據發生更改時存在。但是,當然,我對這種情況進行了硬編碼(可能需要超過2秒),並且互聯網連接可能會失敗,從而阻止GridView正確更新。

這裏是Thread

private Runnable myRunnable = new Runnable(){ 

@Override 
public void run() { 
    try { 
     Thread.sleep(2000); 
     updateData(); // contains notifyDataSetChanged() 
     if(images[0] == null){ 
     Toast.makeText(getApplicationContext(), 
"Your Internet Connection is not working properly", Toast.LENGTH_SHORT).show();     
     } 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 

}; 

非常感謝您!

+0

你不能從ui線程以外的線程更新ui。 updateData有什麼作用? – Raghunandan

+0

嗯,這是一個用戶界面線程。 'UpdateData()'設置適配器的數據並調用'notifyDataSetChanged()' –

回答

2

您可以使用AsyncTask類。它有三個重要的抽象函數。 doInBackground onPostExecute onPreExecute

你可以在網上搜索這個,也可以檢查這個link

+1

你是對的。即使我使用'AsyncTask',我完全忘了'onPostExecute'。這比'Thread'好多了。謝謝! –

相關問題