Я предполагаю, что каждый знает интерфейс интерфейса слушателя. У меня есть класс с некоторыми любимыми предметами, которые пользователь может добавить или удалить.Несколько слушателей в одном классе
В этом классе у меня есть:
public static OnFavsChangedListener onFavsChangedListener;
public interface OnFavsChangedListener {
abstract void onFavsChanged();
}
public static void setOnFavsChangedListener(
OnFavsChangedListener listener) {
onFavsChangedListener = listener;
}
public void addToFavorites() {
if (onFavsChangedListener != null) {
onFavsChangedListener.onFavsChanged()
}
}
Это прекрасно работает, когда мне нужно использовать только один из этих слушателей, когда я использую setOnFavsChangedListener
из разных Activities
, они будут перезаписаны последней.
Моя идея состояла в том, чтобы использовать ArrayList
слушателей и назвать их всех, когда мой Favs изменения, но это трудно не позволить ArrayList
расти слишком большой (Activities
может добавить слушателя при каждом изменении ориентации/onCreate
). Я мог бы использовать HashMap
идентификаторов и слушателей, пусть каждый Activit
убирает его слушателя onDestroy
, но это кажется неуклюжим.
TL; DR: Какой изящный способ для нескольких Activities
быть информированным, когда меняет Favs?
Что такое управление Favs? IOW, кто будет вызывать 'addToFavorites()' в вашем сценарии? – CommonsWare
Я собирался предложить, что сказал блэмер в своем ответе, использовать автобус, чтобы сгладить это. Если вы не хотите этого делать, типичный шаблон - использовать коллекцию слушателей, и слушатели должны отменить регистрацию, когда это будет сделано (это обычная причина ошибок/утечек, но так оно и работает, и это одна из причин предпочтительной шины - также автобус намного меньше кода). –
@CommonsWare addTofavorites может также вызываться из разных видов деятельности. Это общедоступный статический метод. Однако я позаботился о возможных ConcurrentModificationExceptions. – FWeigl