android如何使侦听器成为自定义变量?
我见过这个线程:关于实现侦听器 它实际上非常简单,但我不知道它是如何完成的,以及如何在我自己的代码中实现 我有一个静态变量:AppLoader.isInternetOn。 我想构建一个侦听器,它将侦听此变量的更改并更新TextView 我应该这样做吗 构建一个接口:android如何使侦听器成为自定义变量?,android,listener,Android,Listener,我见过这个线程:关于实现侦听器 它实际上非常简单,但我不知道它是如何完成的,以及如何在我自己的代码中实现 我有一个静态变量:AppLoader.isInternetOn。 我想构建一个侦听器,它将侦听此变量的更改并更新TextView 我应该这样做吗 构建一个接口: public interface InternetStateListener { public void onStateChange(); } 在我的活动中运行它: public class MyActivity ext
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")
}
}
}
您缺少的部分是实际通知侦听器的类。因此,您需要一个运行和ping网络状态的类(很可能是一个服务)。然后,当它检测到更改时,应该在任何注册的侦听器中调用onStateChange()。然后,您将在该服务上调用setTheListener,而不是在您的活动上调用setTheListener
这里有一个详细描述此设计模式的链接:您的活动没有什么特殊的功能,只需将自身注册(因为接口直接在类中实现)到提供侦听器的另一个类中即可
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);
}
}
哦,我想我现在意识到了架构!非常感谢!因此,对于继承接口的任何类,当直接从接口调用
mListener.onStateChange(boolean)
时,它们将收到onStateChange()
通知?因此,它就像接口在完成一项更改变量的任务后,只要主接口中的变量发生更改,就与任何子继承类进行通信,对吗?谢谢:)如果是,我如何从活动中调用doYourWork()
?