You say the correct way for CrimeFragment to be “encapsulated” is to remove its need to access the Activity that is hosting it to get at the Intent data that has the UUID it needs.
Yet part of the solution is to have CrimeFragment create the instance of itself with the newInstance(UUID) method. So, at this point it creates itself and has the UUID it will need later in the onCreate() method. So, why use the Intent to pass the UUID and move it to the Bundle data? Why not just have a member variable have that info?
Add a new field to CrimeFragment:
Either have the newInstance method pass the UUID into a constructor which sets mCrimeID:
Or have it set a member variable after creating itself:
CrimeFragment fragment = new CrimeFragment();
fragment.mCrimeID = crimeID;
Then, in the onCreate() method, it just needs to use mCrimeID to get the instance of Crime it needs to display.
Am I missing something? Like maybe you are doing this to help use learn about Intent and Bundle data even though the example here is not a good way to use them?