Android应用上的自定义事件侦听器
我需要设置一个简单的事件侦听器来刷新ListView
偶尔。 问题是我不知道我怎么能产生一个事件。
我知道,像按键或button按下事件我只需要实现Handler
。 但在这个特定的情况下,我实际上需要生成事件,每当我的应用程序的另一个正在运行的线程唤醒并刷新RSS提要的新闻列表时,就会触发该事件。
我做了所有事情,但都陷在这里。 我可以得到任何build议或链接关于如何实现这一点的更多信息?
-
定义一个callback接口
public interface NewsUpdateListener { void onNewsUpdate(<News data to be passed>); }
-
在获取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); } .... }
-
消息可用时触发callback
.... for (listener : listeners) { listener.onNewsUpdate(<News data to be passed>); } ....
-
初始化期间在某处注册侦听器
.... <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生命周期的作者。