У меня есть один Activity
и шесть разных Fragments
прилагается к нему. Каждый фрагмент имеет интерфейс OnFragmentInteractionListener
, и активность реализует все эти прослушиватели, чтобы получать обратные вызовы. Это выглядит немного грязно, поэтому меня интересуют некоторые шаблоны/способы упростить это и сделать более элегантным?Как обрабатывать несколько слушателей взаимодействия фрагментов в одном упражнении правильно?
ответ
Хорошим решением может быть использование ТОЛЬКО ONFragmentInteractionListener для всех фрагментов и использование одного параметра каждого метода прослушивателя (например, параметра TAG) для идентификации того, какой фрагмент отправил действие.
Вот пример:
Создайте новый класс и каждый фрагмент использовать этот класс
OnFragmentInteractionListener.java
public interface OnFragmentInteractionListener {
public void onFragmentMessage(String TAG, Object data);
}
В вашей деятельности:
public void onFragmentMessage(String TAG, Object data){
if (TAG.equals("TAGFragment1")){
//Do something with 'data' that comes from fragment1
}
else if (TAG.equals("TAGFragment2")){
//Do something with 'data' that comes from fragment2
}
...
}
Вы можете использовать Тип объекта для передачи всех типов данных, которые вы хотите (тогда, когда-либо y if, вы должны преобразовать Object в тип, который был необходим).
Используя этот способ, обслуживание проще, чем у 6 разных слушателей и метод для каждого типа данных, которые вы хотите передать.
Надеюсь, это поможет.
Моя попытка улучшения neonamu's answer:
Вы можете определить интерфейс, как указано выше, но общий один
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
Тогда в принимающей деятельности вы можете реализовать его специально для данного типа вы хотите, или как предлагалось выше для объекта:
public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
...
@Override
public void onListFragmentInteraction(String tag, Object data) {
//do some stuff with the data
}
}
Таким образом, когда вы реализуете интерфейс в зависимости от потребностей вашего приложения, возможно, вы можете повторно использовать этот интерфейс в другой ситуации.
- 1. Несколько слушателей в одном классе
- 2. Несколько фрагментов в одном действии
- 3. Слушатели взаимодействия фрагментов в FragmentPagers
- 4. Несколько Слушателей в одном RabbitListenerContainer не работает
- 5. Как обрабатывать несколько фрагментов для одной активности
- 6. Как правильно реализовать несколько фрагментов в Android
- 7. Как правильно обрабатывать просмотр ресайклеров в жизненном цикле фрагментов?
- 8. Как обрабатывать несколько массивов в одном диапазоне?
- 9. Несколько слушателей
- 10. Android - Несколько фрагментов, основанных на одном классе
- 11. Как опубликовать несколько фрагментов в одном файле Sublime Text 3?
- 12. Несколько слушателей OracleAQ в одном контейнере jms весной?
- 13. Python - Django - Как правильно обрабатывать несколько страниц
- 14. Обрабатывать несколько DataGridViews в одном скрипте?
- 15. Howto очистка местоположения слушателей в действиях правильно
- 16. java MVC, несколько слушателей
- 17. Как обрабатывать перезагрузку фрагментов в Android?
- 18. Firebase несколько дочерних слушателей
- 19. ExtJS несколько слушателей
- 20. Jetty9 несколько слушателей
- 21. Как обрабатывать несколько форм в одном шаблоне в экспресс
- 22. Как обрабатывать несколько намерений в одном действии в android?
- 23. Замена фрагментов в одном действии
- 24. Несколько фрагментов в одном файле. Возвышенный текст. 2
- 25. Java: Как обрабатывать несколько транзакций Hibernate в одном запросе?
- 26. Несколько WS-вызовов в одном действии, как обрабатывать объекты Promise?
- 27. Как обрабатывать несколько видов в одном представлении с помощью backbonejs
- 28. Как обрабатывать несколько операторов копирования XSLT в одном совпадении?
- 29. Как обрабатывать несколько утверждений в одном единственном Python unittest?
- 30. Несколько слушателей MQ не работают
Работает как очарование. Большое спасибо! –
Мне было интересно, почему вы используете @Override и пользователь Neonamu этого не делает. Оба работают? – Burkely91
@ Burkely91 да он будет работать без него.BUT Вы должны использовать его. аннотация переопределения в Java предназначена для проверки/проверки, что вы фактически выполняете переопределение, которое, по вашему мнению, вы (оно сообщит об ошибке, если вы забудете параметр, например) без переопределения, вы просто определяете новый метод с тем же именем разные параметры (выполнение перегрузки) и не реализация интерфейса – HenriqueMS