android – 为Class而不是实例实现一个监听器

android – 为Class而不是实例实现一个监听器,第1张

概述我有很多类MyClass的实例,他们都必须对来自另一个类MyEventClass的一些生成的事件作出反应.我该怎么做? 我的第一个想法是在MyEventClass中定义一个监听器并在MyClass中实现它,但这需要MyClass的每个实例设置监听器,另外还要将监听器定义为MyEventClass中的数组. 很多代码/工作. 我认为另一种选择是在MyElassClass和MyClass中的接收器中使 我有很多类MyClass的实例,他们都必须对来自另一个类MyEventClass的一些生成的事件作出反应.我该怎么做? @H_502_2@我的第一个想法是在MyEventClass中定义一个监听器并在MyClass中实现它,但这需要MyClass的每个实例设置监听器,另外还要将监听器定义为MyEventClass中的数组.
很多代码/工作.

@H_502_2@我认为另一种选择是在MyElassClass和MyClass中的接收器中使用广播,但我不确定,可能是过度使用,接收器也要注册(并且在onStop()上未注册)

@H_502_2@第三种选择是为MyClass类定义监听器实现,而不是为每个实例定义,这将完全适合,但我不知道它是否可行,我如何编写它.

@H_502_2@我刚刚提出的第四个选项是在MyClass的父类上实现监听器,只在MyEventClass中设置这个监听器,然后在事件发生循环中通过所有MyClass实例并手动调用它们的监听器.这节省了我使用MyEventClass注册每个实例.

解决方法 StinePike是正确的,这是编码时遇到的一个非常标准的问题. Observer(或 Java talk中的监听器)模式是此标准实践解决方案.你应该使用你的第一个命题,你的措辞有点不清楚,所以如果我不太清楚的话,我会把它给你. @H_502_2@让MyEventClass提供一个Listener接口,比如MyEventClassListener,以及添加/删除方法.然后MyClass可以作为听众附加/分离自己.这是一个代码示例,以备您需要时:

@H_502_2@MyEventClass.java

public class MyEventClass {    private Set<MyEventClassListener> Listeners = new HashSet<MyEventClassListener>();    // Your code here...    public voID addListener(MyEventClassListener Listener) {        Listeners.add(Listener);    }    public voID removeListener(MyEventClassListener Listener) {        Listeners.remove(Listener);    }    public voID notifyListeners() {        for (MyEventClassListener Listener : Listeners) {            Listener.somethingHappened();        }    }}
@H_502_2@MyEventClassListener.java

public interface MyEventClassListener {    public voID somethingHappened();}
@H_502_2@MyClass.java

public class MyClass implements MyEventClassListener {    MyEventClass myEventClass;    // Your code here..    public voID someFunction() {        // Add as Listener        myEventClass.addListener(this);    }    @OverrIDe    public voID somethingHappened() {        // Act on callback    }}
总结

以上是内存溢出为你收集整理的android – 为Class而不是实例实现一个监听器全部内容,希望文章能够帮你解决android – 为Class而不是实例实现一个监听器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1140980.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存