2011-06-06 17 views
1

我正在創建一個依賴於Internet連接的數據後端的應用程序。這些數據在活動之間很常見。此外,數據將保持刷新,例如通過每兩三分鐘更新一次。因此,我創建了一個數據處理程序類,它應該處理與數據下載,解析等有關的所有事情。有時,它會從Activity接收命令來刷新數據。如何在基礎數據處理程序接收數據時在Activity上觸發UI更新

問題是,如何在數據處理程序中有新數據可用時刷新活動中的UI。如果數據處理程序處於活動狀態,則可以僅發佈UI線程的處理程序來更新它。但是,我不知道如何從這個基礎類中做到這一點。有什麼建議?

下面是三類粗糙代碼:

/** 
* The data handler class itself 
*/ 
public class DataHandler { 
    Object data; 

    public void getData() { 
    // starts a thread (HTTP query) to get data 
    } 

    private class dataReceived (Object data) { 
    // receives data 
    this.data = data;  

    // TRIGGER updateUI() in MyActivity! HOW? 
    } 
} 

/** 
* Application class. I'm planning to keep data handler here, and reference it from activities when required. 
*/  
public class MyApplication extends Application { 
    private DataHandler dataHandler; 

    public DataHandler getDataHandler() { 
     return dataHandler; 
    } 

    public void onCreate() { 
     DataHandler dataHandler = new DataHandler(); 
    } 
} 

/** 
* Activity 
*/  
public class MyActivity extends Activity { 
    DataHandler dataHandler; 

    public void onCreate(Bundle o) { 
    dataHandler = ((MyApplication) getApplication()).getDataHandler(); 
    } 

    public void onResume() { 
    // trigger data refresh (OBS! This could also be by a button press etc.) 
    dataHandler.getData(); 
    } 

    public void updateUI() { 
    // UPDATE UI 

    // should be called on DataHandler when data is received. HOW? 
    } 
} 
+0

請參考以下文章http://stackoverflow.com/questions/6223389/do-some-android-ui-stuff-in-non-ui-thread/6223416#6223416 – ingsaurabh 2011-06-06 10:40:15

+0

檢查此問題:http:// stackoverflow .com/questions/4369537/update-ui-from-thread – Flo 2011-06-06 10:43:14

回答

1

註冊您的活動作爲一個監聽到的DataHandler當線程臨危數據調用任何偵聽器。

你是怎麼介紹這些數據的?如果它是一個帶有ArrayAdapter的ListView,那麼只需在更新時調用其上的notifyDataSetChanged()即可。

您必須確保在適當的UI線程中更新UI,其中有很多方法。想到的一點是,您可以創建一個阻止AsyncTask來接收偵聽器事件,取消阻塞後臺線程並運行其publishProgress()以確保更新發生在UI上。

+0

必須閱讀更多關於聽衆的內容。謝謝你的回答! – 2011-06-07 12:34:35

相關問題