Android应用程序上的自定义事件侦听器
我需要设置一个简单的事件侦听器,以便偶尔刷新一次Android应用程序上的自定义事件侦听器,android,events,event-handling,listener,addeventlistener,Android,Events,Event Handling,Listener,Addeventlistener,我需要设置一个简单的事件侦听器,以便偶尔刷新一次ListView。问题是我不知道如何生成事件 我知道,对于按键或按钮按下之类的事件,我只需要实现处理程序。但在这种特定情况下,我实际上需要生成事件,每当我的应用程序的另一个运行线程唤醒并刷新RSS提要中的新闻列表时,就会触发该事件 我什么都做了,但是被困在这里了。我能得到一些关于如何实现这一点的建议或链接吗?听起来你需要一个处理程序-(详细信息请查阅android.os.Handler) sendMessageDelayed方法将允许您安排将消息发
ListView
。问题是我不知道如何生成事件
我知道,对于按键或按钮按下之类的事件,我只需要实现处理程序
。但在这种特定情况下,我实际上需要生成事件,每当我的应用程序的另一个运行线程唤醒并刷新RSS提要中的新闻列表时,就会触发该事件
我什么都做了,但是被困在这里了。我能得到一些关于如何实现这一点的建议或链接吗?听起来你需要一个处理程序-(详细信息请查阅android.os.Handler) sendMessageDelayed方法将允许您安排将消息发送到处理程序的时间 快速搜索得到了一个完整的示例,应该可以让您开始学习:尝试以下方法:
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);
}
}
public interface NewsUpdateListener
{
void onNewsUpdate(<News data to be passed>);
}
公共接口NewsUpdateListener
{
void onNewsUpdate();
}
class <Background processing class name>
{
....
ArrayList<NewsUpdateListener> listeners = new ArrayList<NewsUpdateListener> ();
....
public void setOnNewsUpdateListener (NewsUpdateListener listener)
{
// Store the listener object
this.listeners.add(listener);
}
....
}
类
{
....
ArrayList侦听器=新的ArrayList();
....
public void setOnNewsUpdateListener(NewsUpdateListener侦听器)
{
//存储侦听器对象
this.listeners.add(listener);
}
....
}
....
for (listener : listeners)
{
listener.onNewsUpdate(<News data to be passed>);
}
....
。。。。
for(侦听器:侦听器)
{
onNewsUpdate();
}
....
....
<class <Background processing class object>.registerListener
(
new OnNewsUpdateListener() {
onNewsUpdate(<News Data>) {
// process news data
runOnUIThread(new Runnable() {
public void run() {
// refresh list view
}
}
}
}
....
。。。。
你可以用它
创建一个信号接口,即您的事件
interface NewsUpdateSignal{
void newsUpdateHandler(Mydata data);
}
与在活动中或任何您想要的地方注册到它相比,同一个信号可能有许多侦听器
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
}
}
类MyActivity扩展活动实现NewsUpdateSignal{
Signal newsUpdateSignal=SignalsBag.inject(NewsUpateSignal.class);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
newsUpdateSignal.addListener(此);
}
@凌驾
public void newsUpdateHandler(最终Mydata数据){
//在这里做点什么
}
}
当你需要的时候,从你需要的地方发出信号
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);
}
}
A类{
Signal newsUpdateSignal=SignalsBag.inject(NewsUpateSignal.class);
void execute(){
//以某种方式获取数据并进行调度,回调将在同一线程上调用
newsUpdateSignal.dispatcher.newsUpdateHandler(数据);
}
}
免责声明:我是安卓生命周期的作者。这种方法具有简单的优点,但是Sameer的回答允许为一个给定事件设置多个侦听器,这是我通常推荐的解决方案。这不是最好的方法,在很多情况下,您需要侦听器方面的快速反应,sendMessageDelayed/Handler将添加不必要的延迟。最好的方法是按照下面Sameer的例子创建一个listner接口并保存一个侦听器数组。你能详细说明一下不同的代码段放在哪里吗?@FireFly3000:我认为代码段2是一个java类,你希望有一个事件,代码段1可以在一个单独的文件中,或者是2的子类。代码段3应该是代码段2的成员。代码片段4出现在想要收听该事件的类中。感谢您提供的很棒的解决方案。什么是注销侦听器的适当时间?由于您每次都要将侦听器添加到arrayList中,您将在何时删除侦听器?这一个非常好interesting@DanielCardenastnx,现在实际上更简单了(您只需要为您的事件创建一个接口),我更新了答案以使用最新版本的生命周期