Android changeListener для переменной

Мне нраиться в Android его собитийность и множество функций, отрабатывающих при наступлении события. Вот например обьявление функции для обработки нажатий пунктов меню:

public boolean onOptionsItemSelected(MenuItem item)

На вход получаем параметр в котором лежит пункт меню.

Но как создать свое событие?

Рассматривать будем на примере создания персонажа для несуществующей игры. У нас будет два класса MainActivity и Pers. Класс Pers - модель персонажа за которого мы играем. В нем будем хранить здоровье, ману ну и любые другие данные, которые будут необходимы. Создадим событие onHungry для нашего персонажа. Это событие будет вызываться когда параметр голод будет меньше, например 40%.

Код класса Pers:

package com.example.game.models;

import android.app.Activity;

public class Pers {

private final Activity activity;
private int hungry;
private listener l = null;

public Pers(Activity activity) {
this.activity = activity;
}

public int getHungry() {
return hungry;
}

public void setHungry(int hungry) {
this.hungry = hungry;
if (this.hungry == 40) {
hungry();
}
}

public void setChangeListener(listener mListener) {
l = mListener;
}

private void hungry() {
if (l != null) {
l.onHungry(activity);
}
}

public interface listener {
void onHungry(Activity activity);
}

}

У нас есть 3 свойства:

  • activity - оно нужно для отображения высплывающего окна;
  • hungry - в нем мы храним текущее состояние голода. В примере логика не реализована, но будем думать что значение может быть от 0 до 100;
  • l - интерфейс для нашего события.

Внутри класса создаем интерфейс с именем listener в котором определяем метод onHungry, его мы будем переопределять в MainActivity. А в сеттере setHungry смотрим на сколько сыт наш персонаж, и, если еды осталось 40% говорим создать событие onHungry через функцию hungry(). Теперь, если гдето в логике работы приложения вызвать конструкцию

<span style="font-family: 'DejaVu Sans Mono';

Теги:

android