The problem with an Event Bus solution is that is too wide open. As your App start growing the number of events grow so much that you basically run out of names. Developers need to have discipline on that otherwise the code gets a bit harder to maintain.
It is also hard for achieving modularity, now every module in your App could depend on any other Module's event. So extracting a piece of your App to reuse in other projects become cumbersome.
For the initial problem you can define a Callback interface in the Fragment class and make the Activity implement it. It creates a coupled dependency between the 2 classes though.
If your goal is to share data between them I would do it through Activity ViewModel. Create a viewModel with the activity Scope, this ViewModel will offer a LiveData, coroutine Flow or Rx Flowable pipe of events to any subcriber.
Your activity will subscribe to this pipe of events when is created.
Then from your fragment send events to the ViewModel and it will propagate them to the Activity.
This way you don't have the boilerplate of creating a new Callback interface for each Fragment class you create. When you add a new Fragment class just add more event types in your ViewModel.