我正在创建一个应用程序,它依赖于互联网连接上的数据后端。此数据在活动之间是常见的。此外,数据将保持刷新,例如每两到三分钟更新一次。因此,我创建了一个数据处理程序类,它应该处理与数据下载、解析等相关的所有事情。有时,它会从Activity接收刷新数据的命令。
问题是,当新数据在数据处理程序中可用时,如何刷新活动中的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?
}
}发布于 2011-06-06 20:31:47
将您的活动注册为DataHandler的侦听器,当线程接收到数据时调用任何侦听器。
您是如何呈现数据的?如果它是一个带有ArrayAdapter的ListView,那么只需在获得更新时调用它的notifyDataSetChanged()即可。
您必须确保在适当的UI线程中更新UI,这有很多种方法。我想到的一个方法是,您可以创建一个阻塞的AsyncTask,它接收侦听器事件,解除阻塞它的后台线程,并运行它的publishProgress()以确保在UI上进行更新。
https://stackoverflow.com/questions/6250798
复制相似问题