Обработка нескольких слушателей с помощью своего рода идентификации - PullRequest
0 голосов
/ 09 октября 2018

Я разрабатываю приложение Android для Ble-Device и реализую интерфейс для прослушивания операций записи, чтения и подписки.Я добавляю все свои экземпляры слушателя в List и запускаю методы Interface , например:

readWriteEvent = new BleDevice.ReadWriteEvent(true, status, characteristic.getValue());
                for (ReadWriteListener listener : readWriteListener) {
                    listener.onEvent(readWriteEvent);
                }

Но проблема в том, что все ReadWriteEvents срабатывает тот, у кого есть активный слушатель.Так есть ли какая-то идентификация, где я могу вызвать конкретного слушателя?Чтобы я мог сделать что-то вроде этого:

for (ReadWriteListener listener : readWriteListener) {
 if (listener.getUuid() == characteristic.getUuid()) { 
  listener.onEvent(readWriteEvent);
 }
}

Или есть лучшее решение для моей проблемы?Вот как выглядит мой интерфейс :

public interface ReadWriteListener {
void onEvent(BleDevice.ReadWriteEvent event);
}

1 Ответ

0 голосов
/ 09 октября 2018

Вместо этого используйте абстрактный класс:

public abstract class ReadWriteListener {
    private int uid;

    public ReadWriteListener(int uid) {
        this.uid = uid;
    }

    public int getUid() {
        return uid; //or just make uid final and public
    }

    public abstract void onEvent(BleDevice.ReadWriteEvent event);
}

Таким образом, при его создании вы можете передать UID и извлечь его, тогда как метод onEvent остается абстрактным и необходимым для реализации.Конечно, это означает, что вы больше не можете реализовать слушателя в классе, который уже расширяет другой класс.

...