android如何使监听器自定义variables?

我见过这个post: 如何实现一个关于实现监听器的监听器。

它实际上非常简单,但我不知道它是如何完成的以及如何在我自己的代码中实现。

我有这个静态variablesvariables:AppLoader.isInternetOn。 我想构建一个监听器,它将监听这个variables并更新TextView。

我应该这样做:?

构建一个接口:

public interface InternetStateListener { public void onStateChange(); } 

在我的活动中运行它:

 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") } } } 

您的Activity没有什么特别的,只是通过提供监听器的Other类来注册自身(因为接口是直接在类中实现的)。

 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(); } } 

另一个class级必须完成所有的工作。 除此之外,它必须处理监听器的注册,一旦发生某事,它必须调用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); } } 

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

这是一个完整描述这种设计模式的链接: http : //en.wikipedia.org/wiki/Observer_pattern