Теперь осталось реализовать MainActivity. При использовании фрагментов, большая часть логики ушла из MainActivity в отдельные фрагменты. В данном случае, нам необходимо только добавить фрагмент ContactsFragment при старте Activity, а также запрограммировать работу кнопки "назад".
Сначала реализуем добавление нового фрагмента при старте Activity.
Обратите внимание, что мы также вызываем метод setReorderingAllowed(true) и addToBackStack(), как и при добавлении фрагмента AddContactFragment.
Реализация кнопки "назад"
Теперь необходимо реализовать работу кнопки "назад". Для нашего приложения логика работы кнопки "назад" должна быть следующая: если мы сейчас на экране AddContactFragment, то при нажатии "назад" на экране должен появится фрагмент ContactsFragment. Если сейчас на экране ContactsFragment, то при нажатии "назад" мы должны "выйти из приложения" (приложение будет свернуто в background). Схематично это выглядит так
Для этого мы используем такую возможность менеджера фрагментов как backstack (стек фрагментов). Он позволяет сохранить последовательность добавления фрагментов и при нажатии кнопки "назад" мы извлекаем из вершины backstack'а видимый фрагмент и показываем предыдущий фрагмент (логика работы стека фрагментов очень сильно напоминает логику работы стека activity).
В нашем случае, в стеке фрагментов всегда будет, как минимум, один фрагмент (ContactsFragment), а максимум - два фрагмента (ContactsFragment + AddContactFragment). Логика работы кнопки "назад" следующая: если в стеке больше 1 фрагмента (сейчас виден фрагмент добавления контакта), то при нажатии кнопки "назад", видимый фрагмент из стека извлекается (будет показан фрагмент списка контактов). Если же в стеке 1 фрагмент (сейчас виден фрагмент списка контактов), то при нажатии "назад", мы закрываем activity.