Вы неправильно добавляете фрагменты в стек. Метод
transaction.addToBackStack(null)
, в который вы передаете
null
должен принимать строку-идентификатор, по которой вы однозначно можете идентифицировать данный фрагмент в стеке. Вернуться в любому помеченному так фрагменту можно так:
FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
где
name как раз та самая строка-идентификатор.
Вызвав
FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
можно очистить весь стек фрагментов.