Intereting Posts
Ошибка: типы строк не разрешены (в 'screenOrientation' со значением 'sensorPortait') Использовать RecyclerView внутри ScrollView с гибкой высотой элемента Recycler LinearLayout с двумя детьми равной ширины Может ли универсальный загрузчик изображений для android работать с изображениями из sqlite db? Какой уровень API для использования с поддержкой библиотеки Android? Различия между Greenrobot EventBus и EventBus от Guava Стратегия Android для отслеживания сеанса входа в систему Как удалить edittext без setText (""); Maxlength атрибут ввода в html не работает на HTC One M7 Исходный код для нового приложения Calendar Lollipop Calendar Как изменить цвет элементов ListView в фокусе и щелчке Использование андроида: процесс Не удалось запустить виртуальное устройство Genymotion – виртуальный абонентский хост Ethernet-адаптер не удалось запустить Ошибка в clearCheck для Android () для RadioGroup? Есть ли способ передать arraybuffer из javascript в java на Android?

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