Android Как сделать слушателем пользовательскую переменную?

Я видел эту тему: Как реализовать слушателя о прослушивателях реализации.

Его на самом деле довольно просто, но я не понимаю, как именно это делается и как реализовать в моем собственном коде.

У меня есть эта статическая переменная: AppLoader.isInternetOn. Я хочу создать слушателя, который будет слушать эту переменную, меняет и обновляет 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") } } } 

Solutions Collecting From Web of "Android Как сделать слушателем пользовательскую переменную?"

Ваша деятельность не делает ничего особенного, просто зарегистрируйтесь (поскольку интерфейс реализован непосредственно в классе) с классом 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(); } } 

Другой класс должен выполнять практически всю работу. Кроме того, он должен обрабатывать регистрацию слушателей, он должен вызвать метод 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); } } 

Часть, в которой вам не хватает этого класса, который на самом деле уведомляет слушателя. Таким образом, вам понадобится класс (скорее всего, служба), который запускает и проверяет состояние сети. Затем, когда он обнаруживает изменение, он должен вызывать onStateChange () в любом зарегистрированном слушателе. Затем вы вызываете setTheListener на этой службе, а не на свою деятельность.

Вот ссылка, которая полностью описывает этот шаблон дизайна: http://en.wikipedia.org/wiki/Observer_pattern