2012-03-26 42 views
9

我见过这个线程:How to implement a listener关于实现监听器。android如何让侦听器自定义变量?

它其实很简单,但我不明白它的完成和如何在我自己的代码中实现。

我有这个静态变量变量:AppLoader.isInternetOn。 我想建立一个监听器,它将监听这个变量的变化并更新一个TextView。

我应该这样做吗?

构建一个接口:

​​

来看,它在我的活动:

public class MyActivity extends Activity { 
private InternetStateListener mListener; 

setTheListener(this); 

public void setTheListener(InternetStateListener listen) { 
    mListener = listen; 
} 

private void onStateChange() { 
    if (mListener != null) { 
     if (AppLoader.isInternetOn) 
     text.setText("on") 
     else 
     text.setText("off") 
    } 
    } 
} 

回答

23

你的活动并没有什么特别的,只是注册与自身提供听者其他类(因为接口直接在类中实现)。

public class MyActivity extends Activity implements InternetManager.Listener { 

    private TextView mText; 
    private InternetManager mInetMgr; 

    /* called just like onCreate at some point in time */ 
    public void onStateChange(boolean state) { 
     if (state) { 
      mText.setText("on"); 
     } else { 
      mText.setText("off"); 
     } 
    } 

    public void onCreate() { 
     mInetMgr = new InternetManager(); 
     mInetMgr.registerListener(this); 
     mInetMgr.doYourWork(); 
    } 
} 

其他类有几乎做所有的工作。除了它必须处理听众的注册之外,一旦发生了事情,它必须调用onStateChange方法。

public class InternetManager { 
    // all the listener stuff below 
    public interface Listener { 
     public void onStateChange(boolean state); 
    } 

    private Listener mListener = null; 
    public void registerListener (Listener listener) { 
     mListener = listener; 
    } 

    // ----------------------------- 
    // the part that this class does 

    private boolean isInternetOn = false; 
    public void doYourWork() { 
     // do things here 
     // at some point 
     isInternetOn = true; 
     // now notify if someone is interested. 
     if (mListener != null) 
      mListener.onStateChange(isInternetOn); 
    } 
} 
+0

ohhhh我觉得iv'e现在已经意识到了架构!非常感谢! – 2012-03-27 06:40:04

+0

谢谢你。非常好,清楚的解释。 – Kristopher 2013-02-03 10:25:09

+0

因此,对于继承接口的任何类,当从接口直接调用'mListener.onStateChange(boolean)'时,它们将通过'onStateChange()'通知?所以,当接口完成一个改变变量的任务后,当主接口中的变量发生变化时,它就像接口正在与任何子继承类进行通信,对吗?谢谢:) – 2016-06-25 17:32:48

0

,你失踪了,实际上通知监听器类部分。所以你需要一个能够运行和调整网络状态的类(很可能是一种服务)。然后当它检测到更改时,它应该在任何注册的侦听器中调用onStateChange()。然后你会在该服务上调用setTheListener,而不是在你的活动上。

下面是详尽地介绍这种设计模式的链接:http://en.wikipedia.org/wiki/Observer_pattern

相关问题