Android应用上的自定义事件侦听器

我需要设置一个简单的事件侦听器来刷新ListView偶尔。 问题是我不知道我怎么能产生一个事件。

我知道,像按键或button按下事件我只需要实现Handler 。 但在这个特定的情况下,我实际上需要生成事件,每当我的应用程序的另一个正在运行的线程唤醒并刷新RSS提要的新闻列表时,就会触发该事件。

我做了所有事情,但都陷在这里。 我可以得到任何build议或链接关于如何实现这一点的更多信息?

  1. 定义一个callback接口

      public interface NewsUpdateListener { void onNewsUpdate(<News data to be passed>); } 
  2. 在获取RSS提要的后台线程上提供一个注册工具

      class <Background processing class name> { .... ArrayList<NewsUpdateListener> listeners = new ArrayList<NewsUpdateListener> (); .... public void setOnNewsUpdateListener (NewsUpdateListener listener) { // Store the listener object this.listeners.add(listener); } .... } 
  3. 消息可用时触发callback

     .... for (listener : listeners) { listener.onNewsUpdate(<News data to be passed>); } .... 
  4. 初始化期间在某处注册侦听器

     .... <class <Background processing class object>.registerListener ( new OnNewsUpdateListener() { onNewsUpdate(<News Data>) { // process news data runOnUIThread(new Runnable() { public void run() { // refresh list view } } } } .... 

尝试这个:

 interface MyHandlerInterface { void onHandle(Object obj) } class myListClass { MyHandlerInterface myHandler; public void setHandlerListener(MyHandlerInterface listener) { myHandler=listener; } protected void myEventFired(myObj) { if(myHandler!=null) myHandler.onHandle(myObj); } } 

这听起来像你需要一个处理程序 – (详细查找android.os.Handler)。

sendMessageDelayed方法将允许您安排消息何时发送到您的处理程序。

快速search拉起了一个完整的例子,应该让你开始: http : //www.tutorialforandroid.com/2009/01/using-handler-in-android.html

你可以使用android生命周期 。

创build一个信号接口,即你的事件

 interface NewsUpdateSignal{ void newsUpdateHandler(Mydata data); } 

除了在你的活动或其他任何你想要注册的地方,可能会有很多听众使用相同的Signal

 class MyActivity extends Activity implements NewsUpdateSignal{ Signal<NewsUpateSignal> newsUpdateSignal = SignalsBag.inject(NewsUpateSignal.class); @Override protected void onCreate(Bundle savedInstanceState) { newsUpdateSignal.addListener(this); } @Override public void newsUpdateHandler(final Mydata data){ //Do something here } } 

并在需要时从您需要的地方发出信号。

 Class A{ Signal<NewsUpateSignal> newsUpdateSignal = SignalsBag.inject(NewsUpateSignal.class); void execute(){ // obtain the data somehow, and dispatch it, the callback will be invoked on the same thread newsUpdateSignal.dispatcher.newsUpdateHandler(data); } } 

免责声明:我是android生命周期的作者。