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

Bil*_*hon 42 events android event-handling listener addeventlistener

我需要设置一个简单的事件监听器来ListView偶尔刷新一次.问题是我不知道如何生成一个事件.

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

我已经做了一切,但被困在这里.我可以获得任何建议或链接有关如何实现这一点的更多信息吗?

Sam*_*eer 90

  1. 定义回调接口

            public interface NewsUpdateListener 
            {
                void onNewsUpdate(<News data to be passed>);
            }
    
    Run Code Online (Sandbox Code Playgroud)
  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);
            }
        ....
        }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 有消息时触发回调

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

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


Hoj*_*jat 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);
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法具有简单的优点,但Sameer的答案允许为一个给定事件设置多个侦听器,这是我通常建议的解决方案. (3认同)