4

Вопрос по oop, android, fragment – Фрагмент 2 Фрагмент общения

Почему я должен использоватьОбщение с другими фрагментами шаблон, когда я мог бы просто использовать

((MyActivity)getActivity()).doFoo();

В моемFragment?

Очень хороший вопрос На мой взгляд, вы скоро получите очень высокий балл за это.

от Snicolas
4 ответа
5

В конечном итоге это вопрос

связь и повторное использование.

Если вы используете пример кода, который вы разместили в своем вопросе, вашFragment не может повторно использоваться с другими действиями. Это 'тесно связаны». Это хорошо, если вы работаете самостоятельно и не думаете, что кто-то, вероятно, когда-либо будет использовать или читать ваш код позже (включая себя), и что вам определенно никогда не понадобится использовать этоFragment где-нибудь еще. Но, вообще говоря, вы все равно должны использовать правильный шаблон, просто чтобы привыкнуть к нему.

Если у вас есть позиционное кодирование в компании, сохраняющей «слабую связь», в долгосрочной перспективе вам и вашим коллегам будет очень полезно, и это означает, что вы можете вернуться к своему коду и повторно использовать его в последующих проектах, если их вызовут за.

Дальнейшее чтение.Даже дальнейшее чтение.Еще дальше читаем.
2

Потому что это создает сильную прямую связь вашего Фрагмента и вашей Д

еятельности, тем самым уменьшая возможность повторного использования вашего Фрагмента: вы можете использовать его только с этой Деятельностью.

Использование интерфейса для обеспечения связи является более гибким, так как несколько действий теперь могут встраивать ваш фрагмент, им просто нужно реализовать интерфейс связи.

Это эквивалентно с точки зрения выполнения программы, но это лучший дизайн, довольно близко отШаблон проектирования Observable-Observer.

Также обратите внимание, что они являются альтернативными решениями:

эфирное маслоEventBusСобытия RoboGuice

Эти решения будут еще чище и приведут к более элегантному коду.

0

Общение между фрагментами должно быть только через деятельность. ((MyA

ctivity) getActivity ()). DoFoo () - вызовет метод в действии, а затем обновит другой фрагмент

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

0

Когда вы звоните

((MyActivity)getActivity()).doFoo() тыпонижающее приведение ваш объект, и вы можете столкнуться сRuntimeException если содержащая активность не является экземпляромMyActivity, Прямой вызов означает, что фрагмент тесно связан с действием. Многие люди верятЭто не хорошая вещь.

Когда вы реализуете интерфейс, как описано в вашей ссылке, вы не сможете создать свое приложение, если не передадите объект, который его реализовал. Это означает, что если вы используете фрагмент в другом месте, вы устраняете рискRuntimeException потому что это сильно напечатано.

Есть вопросздесь объясняется, почему сильная типизация хороша, а жесткая связь плоха

Похожие вопросы