我需要设置一个简单的事件监听器,定期刷新 ListView
。问题是我不知道如何生成事件。
我知道对于像按键或按钮按下这样的事件,我只需要实现 Handler
。但在这种特定情况下,我实际上需要生成事件,每当我的应用程序的另一个运行线程唤醒并从 RSS 源刷新其新闻列表时,就会触发该事件。
我已经做了一切,但卡在这里了。我能否获得有关如何实现此操作的更多信息?
我需要设置一个简单的事件监听器,定期刷新 ListView
。问题是我不知道如何生成事件。
我知道对于像按键或按钮按下这样的事件,我只需要实现 Handler
。但在这种特定情况下,我实际上需要生成事件,每当我的应用程序的另一个运行线程唤醒并从 RSS 源刷新其新闻列表时,就会触发该事件。
我已经做了一切,但卡在这里了。我能否获得有关如何实现此操作的更多信息?
定义一个回调接口
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);
}
....
}
有新闻时触发回调函数
....
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);
}
}
听起来你需要一个Handler -(查看android.os.Handler了解详情)。
sendMessageDelayed方法可以让你安排消息发送给你的handler的时间。
快速搜索找到了一个完整的示例,应该能帮你入门:https://web.archive.org/web/20200810154212/http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html
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生命周期的作者。