首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在基础数据处理程序接收数据时触发活动的UI更新

如何在基础数据处理程序接收数据时触发活动的UI更新
EN

Stack Overflow用户
提问于 2011-06-06 18:37:18
回答 1查看 1.9K关注 0票数 1

我正在创建一个应用程序,它依赖于互联网连接上的数据后端。此数据在活动之间是常见的。此外,数据将保持刷新,例如每两到三分钟更新一次。因此,我创建了一个数据处理程序类,它应该处理与数据下载、解析等相关的所有事情。有时,它会从Activity接收刷新数据的命令。

问题是,当新数据在数据处理程序中可用时,如何刷新活动中的UI。如果数据处理程序处于活动状态,我可以只为UI线程发送一个处理程序来更新它。但是,我不知道如何在这个底层类中实现它。有什么建议吗?

下面是三个类的粗略代码:

代码语言:javascript
复制
/**
 * 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?
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-06 20:31:47

将您的活动注册为DataHandler的侦听器,当线程接收到数据时调用任何侦听器。

您是如何呈现数据的?如果它是一个带有ArrayAdapter的ListView,那么只需在获得更新时调用它的notifyDataSetChanged()即可。

您必须确保在适当的UI线程中更新UI,这有很多种方法。我想到的一个方法是,您可以创建一个阻塞的AsyncTask,它接收侦听器事件,解除阻塞它的后台线程,并运行它的publishProgress()以确保在UI上进行更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6250798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档