Обработка событий приложений Android - PullRequest
4 голосов
/ 25 марта 2011

Существует ли в Android стандартный набор классов Listener / Observer / Observable для управления событиями приложений в Android?

Я говорю не о пользовательском интерфейсе или других событиях API Android, а о событиях пользовательских приложений, таких как GameOverEvent, LevelClearedEvent и т. Д.

Есть ли предпочтительный интерфейс для реализации / расширения, чтобы я мог реализовать такие вещи, как:

public void addGameOverListener(GameOverListener listener)

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Это просто, вам просто нужно создать свой собственный EventListener

public interface onGameFinishedListener {

    public void onGameFinished(GameView gameView);

}

и некоторый класс, который имеет метод onGameFinished ()

public abstract class GameView extends SurfaceView implements SurfaceHolder.Callback{

    List<onGameFinishedListener> listeners;
    public GameThread gameThread;
    protected int width;
    protected int height;
    public GameView(Context context) {
        super(context);
        width = 320;
        height = 480;
        listeners = new ArrayList<onGameFinishedListener>();
    }

    public abstract void init();
    public void registerGameFinishedListener(onGameFinishedListener listener) {
        listeners.add(listener);
    }
    protected void GameFinished(GameView gameView) {
        for (onGameFinishedListener listener : listeners) {
            synchronized(gameThread.getSurfaceHolder()) {
                listener.onGameFinished(gameView);
            }
        }
    }
}

и затем вы внедряете onGameFinishedListener в свое действие или представление, которое вы хотите выполнить, когда игра закончится,

public class RocketActivity extends GameActivity implements onGameFinishedListener {

private final int MENU = 0;
private final int END = 1;
private final int CONFIRMATION = 2;
private RelativeLayout layout;
private RocketView rocketView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    layout = new RelativeLayout(this);
    rocketView = new RocketView(this);

    rocketView.registerGameFinishedListener(this);
    rocketView.init();
    layout.addView(rocketView);
    setContentView(layout);
}

@Override
public void onGameFinished(GameView gameView) {
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            showDialog(END);
        }
    });
}

}

есть. нет необходимости полагаться на Android для EventListener. :)

1 голос
/ 26 февраля 2014

Вы пробовали EventBus от GreenRobot?

Это в основном довольно стандартная реализация eventBus для обработки событий всего приложения. Это обеспечивает связь между потоками, что довольно аккуратно.

Очень похоже на то, что вы получаете за GWT

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