I have one Activity
and six different Fragments
attached to it. Each fragment has OnFragmentInteractionListener
interface and activity implements all these listeners in order to receive callbacks. It looks a little messy, so I'm interested are there some patterns/ways to simplify this and make more elegant?
A good solution could be use the SAME OnFragmentInteractionListener for all fragments, and use one param of each listener methods (like a TAG parameter) to identificate what fragment sent the action.
Here an example:
Make a new class and every fragment use this class
OnFragmentInteractionListener.java
public interface OnFragmentInteractionListener {
public void onFragmentMessage(String TAG, Object data);
}
In your activity:
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
}
...
}
You can use Object type to pass every type of data that you want ( then, in every if, you must convert Object to type that were necessary).
Using this way, maintenance is easier than have 6 differents listeners and a method for every type of data you want to pass.
Hope this helps.
My attempt at improving neonamu's answer:
You can define an interface like specified above, but a generic one
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
Then in the host activity you can implement it specifically for the type you want, or like suggested above for Object:
public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
...
@Override
public void onListFragmentInteraction(String tag, Object data) {
//do some stuff with the data
}
}
This way when you implement the interface depending on your application's needs, maybe you can reuse this interface in another situation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With