Зачем использовать интерфейс для связи от фрагмента к действию?

В чем преимущество использования интерфейса для связи фрагмента с действием, как описано здесь: http://developer.android.com/training/basics/fragments/communicating.html

Это создает ненужную зависимость, когда мы могли бы создать метод onArticleSelected() в активности БЕЗ ИНТЕРФЕЙСА и вызвать его во фрагменте через getActivity().onArticleSelected().

Что, если активность в другой момент времени содержит фрагмент, в котором нет статей, зачем создавать эту нелогичную зависимость и добавлять дополнительный код?


person Marc    schedule 11.02.2016    source источник


Ответы (1)


Использование интерфейса фактически удаляет зависимость от определенного класса Activity. Это позволяет фрагменту работать с любым действием, реализующим интерфейс, а не только с одним действием.

person cybersam    schedule 11.02.2016
comment
При чем здесь интерфейс? Если я хочу использовать фрагмент в другом действии, мне просто нужно создать его экземпляр и использовать. - person Marc; 11.02.2016
comment
В примере HeadlinesFragment на вашей связанной странице ваш фрагмент будет зависеть от конкретной реализации Activity, если вы не использовали интерфейс. Таким образом, вы не можете просто создать его экземпляр и использовать его без интерфейса. - person cybersam; 11.02.2016
comment
Как говорит @cybersam, интерфейс на самом деле предназначен не для взаимодействия активности с фрагментом (что довольно просто, в этом случае вы можете просто использовать конкретный экземпляр), а для того, чтобы фрагмент мог общаться с активностью без точно зная, что это за деятельность. Другими словами, действия будут полиморфны фрагменту. - person Logain; 11.02.2016
comment
но теперь действие связано с интерфейсом, тогда как мы могли бы добиться того же, просто добавив в действие метод onArticleSelected(). Если действие содержит фрагмент, которому это нужно, отлично, вызовите его из фрагмента. В противном случае, не делайте этого. - person Marc; 11.02.2016
comment
Если вы вручную создаете метод в действии, то выполнение getActivity().method() не должно работать. Если у вас он как-то работает то не во всех случаях. В моем приложении это не работает. - person CmosBattery; 11.02.2016
comment
@Mark, проблема здесь в том, что для вашей реализации фрагмент должен знать точный класс действия, если ему нужно с ним взаимодействовать, и его нельзя будет использовать повторно. Я понимаю вашу озабоченность, и вам на самом деле не нужно реализовывать интерфейс в Activity, если вместо этого вы даете обратный вызов фрагменту (а затем этому обратному вызову потребуется реализовать интерфейс) - person Logain; 11.02.2016
comment
Спасибо, я вижу подробное объяснение в рекомендуемом посте. это не подошло в моем поиске. я удалю этот вопрос - person Marc; 11.02.2016