Android, как сделать слушатель пользовательской переменной? - PullRequest
9 голосов
/ 27 марта 2012

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

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

У меня есть эта переменная статической переменной: 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")
    }
  }
}

Ответы [ 2 ]

24 голосов
/ 27 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...