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

时间:2010-06-06 05:49:19

标签: android events event-handling listener addeventlistener

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

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

我已经完成了所有事情,但却陷入了困境。我可以获得任何建议或链接有关如何实现这一点的更多信息吗?

4 个答案:

答案 0 :(得分:90)

  1. 定义回调接口

            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. 在新闻可用时触发回调

    ....
    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
                    }
                }
            }
    }
    ....
    

答案 1 :(得分:28)

试试这个:

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);
   }
}

答案 2 :(得分:3)

听起来你需要一个处理程序 - (详情请查看android.os.Handler)。

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

快速搜索提供了一个可以帮助您入门的完整示例:http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html

答案 3 :(得分:2)

您可以使用android life cycle

创建信号界面,即您的活动

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生命周期的作者。

相关问题