Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fragment 2 fragment communicating

Why i should use the Communicating with Other Fragments pattern when I could simply use

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

In my Fragment?

like image 304
Gorets Avatar asked Mar 21 '23 03:03

Gorets


2 Answers

This is ultimately a question of coupling and re-usability.

If you use the code example you posted in your question your Fragment is not re-usable with other activities. It is 'tightly coupled'. It's fine if you're working on your own and you don't think anyone is likely to ever use or read your code later (including yourself), and that you're definitely never going to need to use that Fragment anywhere else. But generally speaking you should still use the proper pattern, just to get into the habit of using it.

If you have a position coding in a company keeping 'loose coupling' will help you and your co-workers a great deal in the long run, and means you can go straight back to your code and re-use it on later projects if called for.

  • Further reading.
  • Even further reading.
  • Even farther further reading.
like image 154
Rudi Kershaw Avatar answered Apr 05 '23 23:04

Rudi Kershaw


Because it creates a strong direct coupling of your Fragment and your Activity, thus decreasing the re-usability of your Fragment : you can only use it with this Activity.

Using an interface to mediate the communication is more flexible has multiple activities can now embed your Fragment, they just have to implement the communication interface.

That's equivalent in term of program execution, but it's a better design, quite close from the Observable-Observer design pattern.

Also note that they are alternative solutions :

  • Otto
  • EventBus
  • RoboGuice events

Those solutions are even cleaner and will lead to more elegant code.

like image 28
Snicolas Avatar answered Apr 05 '23 21:04

Snicolas